这让我发疯,我不明白这是如何自动工作的。我有 nginx 作为我的网络服务器,我已经安装了具有 URL 重写的 Joomla,它index.php
从 URL 中删除了。以前,当我使用 Apache 时,我必须启用 .htaccessRewriteEngine On
才能使其正常工作。但是对于 Nginx,当我启用“使用 URL 重写”时,它会自动工作。我只使用将 php 文件传递给 php-fpm 的 Nginx。就这样。除了 Joomla 文档中给出的内容之外,我没有添加任何特殊的重写规则。我不明白“使用 URL 重写”是如何在我启用它时自动工作的,因为 Nginx 没有 .htaccess。
关于这个主题的Joomla 文档也没有帮助。在第二步它说
启用使用 Apache mod_rewrite/URL 重写选项并保存:此选项使用 Apache mod_rewrite 函数来消除 URL 的“index.php”部分。
......
如果此选项导致错误,请参阅如何检查您的服务器上是否启用了 mod rewrite。如果它未启用并且您可以访问文件 apache/conf/httpd.conf,请打开该文件并检查 LoadModule rewrite_module modules/mod_rewrite.so 行是否未注释。如有必要,取消注释该行并重新启动 Apache Web 服务器。
不知道为什么在 Nginx 配置中添加它,因为 Nginx 中没有 mod_rewrite。Joomla 后端的 URL 重写是这样说的:
使用 URL 重写 选择使用服务器的重写引擎来捕获满足特定条件的 URL 并按照指示重写它们。适用于 IIS 7 和 Apache。仅限 Apache 用户!激活前将 htaccess.txt 重命名为 .htaccess。将 web.config.txt 重命名为 web.config 并在激活前安装 IIS URL Rewrite Module。
它没有说明 Nginx,但它仍然有效。我在这里挠头。有人可以告诉我 Joomla 的 index.php 是如何在 Nginx 中如此轻松地删除的吗?这是我的 Nginx Vhost 配置:
server {
listen 80;
server_name example.com;
root /var/www/example/public_html;
index index.php index.html index.htm default.html default.htm;
access_log /var/log/nginx/accn_access.log;
error_log /var/log/nginx/accn_error.log;
##
# JOOMLA SEF
##
location / {
try_files $uri $uri/ /index.php?q=$request_uri;
}
##
# PHP scripts to FastCGI
##
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
看..它是一个非常简单的配置。魔法发生在哪里?
魔法发生在这里:
这意味着 nginx 首先检查文件系统上是否存在请求的文件或目录。如果文件不存在,它会将请求传递给 Joomla,并将原始 URI 传递给
q
参数。