很难弄清楚这一点。我已将我的网站从另一个平台更改为 Joomla,现在 Nginx 无法处理旧网址。
我的旧网址是这样的:
example.com/home.php
example.com/contact-us.php
我的新 Joomla SEF 网址是这样的:
example.com/home
example.com/contact-us
根据 Joomla 指南,我有以下 Nginx 配置:
location / {
try_files $uri $uri/ /index.php?$args;
}
# Process PHP
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 来处理它。现在,正在发生的事情是,Nginx 将这些旧网址视为 php 文件,然后向我显示此No input file specified.
错误。然后我将 php 块中的 try_files 更改为,try_files $uri /index.php?$args;
因此我的 Nginx 配置如下所示:
location / {
try_files $uri $uri/ /index.php?$args;
}
# Process PHP
location ~ \.php$ {
try_files $uri /index.php?$args;
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;
}
这是有效的吗?在某些情况下,这会导致无限循环问题吗?这是正确的方法吗?我没有找到任何类似的解决方案。有人可以指导我吗?
location /
从未使用过您遇到的问题与位置优先级有关(已添加重点)。
因此,这个位置块:
匹配此请求:
并且没有其他位置块是相关的。
正如您已经意识到的那样,这意味着 nginx 将尝试查找和服务,
home.php
从而导致 404。对主 index.php 文件使用 @location
通常唯一相关的 php 文件是
index.php
,您可以像这样使用它:对 *.php 请求使用另一个位置块
除了前端控制器之外,joomla 还允许/期望直接访问其他 php 文件,例如
/administrator/index.php
. 要允许访问它们而不尝试处理丢失的 php 文件:这将允许直接访问其他 php 文件(通常,这不是一件好事......)回退到 use
/index.php
,通过该@joomla
位置,用于任何不存在的 php 文件请求。请注意,上述设置也在文档中。