我有一个网站需要从 Apache 服务器迁移到 Nginx 服务器。
本站.htaccess文件如下
RewriteEngine on
RewriteRule ^([^/\.]+)/?$ $1.php [L]
这会将 www.example.com/hello 重定向到 www.example.com/hello.php,保留原始链接,但从 url 末尾省略 .php。
我试图在我的 Nginx 服务器 block 中复制它..
location / {
# Check if a file exists, or route it to index.php.
try_files $uri $uri/ /index.php;
}
rewrite ^/([a-z]+)$ /$1.php last;
重写规则有效,将所有链接重定向到 .php 文件,但如果文件不存在,则打破 Nginx try_files 在目录内搜索的规则。
下面的管理示例链接是一个文件夹,里面有一个 index.php 文件。
www.example.com/admin
try_files 应该将其重定向到..
www.example.com/admin/
因为没有名为 admin.php 的文件。相反,我收到“未指定输入文件”消息。
当我删除重写时,try_files 工作正常。但是,如果没有此重写规则,站点的其余部分将无法工作。
有谁知道如何让 try_files 和重写一起工作?
谢谢
本
最佳答案
我知道这可能没有帮助,但我看了你的用例,我想知道你怎么知道/admin 的请求应该去/admin/而不是/admin.php?
我的意思是您的重写规则清楚地表明,如果您收到对/[a-z]+ 的请求,则应将其重写为/[a-z]+.php
但是你想要一个 try_files 将/admin 推送到/admin/吗?
查看您的 apache 规则:
RewriteRule ^([^/\.]+)/?$ $1.php [L]
我在这里看到您试图限制发送到 x.php 的内容。我在您的 nginx 重写中没有看到任何此类限制。
关于Nginx 重写规则/try_files 不能一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10122640/