我正在尝试将旧网站从 Apache 迁移到 Nginx,但无法将 htaccess 文件重写为 nginx 配置。
当前 htaccess:
<IfModule mod_rewrite.c>
RewriteEngine on
Options +FollowSymLinks
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*) $1.php?rewrite=$2 [QSA]
</IfModule>
我已经尝试过这个 nginx 配置(已经尝试了很多修改但没有任何效果):
location ~ \.php(/|$) {
#try_files $uri $uri/ $uri?rewrite=$args; # Not working
try_files $uri $uri.php $uri?rewrite=index.php; # not working
#try_files = $document_uri.php?rewrite=$args; # not working
fastcgi_pass localhost:8003;
}
我错过了什么?
答案1
这些都不起作用,因为您在中指定的正则表达式location
与您在 Apache 的 .htaccess 中指定的正则表达式不同,并且您并未尝试在中使用其中的匹配项try_files
。
对于您发布的 .htaccess,类似这样的内容应该更合适:
location ~ ^(.*)/(.*) {
try_files $uri $1.php?rewrite=$2&$args =404;
}
其效果如下:首先尝试静态文件,然后尝试匹配的 PHP 脚本,否则返回 404。
请注意,您不是fastcgi_pass
在这里,而是在另一个location
专门用于处理 PHP 文件的地方。
location ~ \.php$ {
#...fastcgi config
}
如果可能的话,你应该考虑重构应用程序以使用合适的前端控制器。这也会降低 nginx 配置的复杂性。