我在这里和其他社区论坛上读了很多帖子,也尝试了一些 htaccess 到 nginx 生成器,但我对此感到震惊。
这是我的 .htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !(/$|\.)
RewriteRule (.*) %{REQUEST_URI}/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
</IfModule>
这是我的 nginx 配置:
location / {
rewrite ^(.*)$ /$request_uri/ redirect;
if (!-e $request_filename){
rewrite ^(.*)$ /index.php break;
}
}
当我运行脚本时,我被循环重定向
http://127.0.0.1////////////////////video/tkOVwe1x49C8wgi////////////////////
很高兴能得到有关此的任何帮助!
答案1
在转换您的第一个RewriteRule
:
RewriteCond %{REQUEST_URI} !(/$|\.)
RewriteRule (.*) %{REQUEST_URI}/ [R=301,L]
你完全忽略了条件:不要重写任何已经以 结尾/
或包含 的内容.
(无论第二个条件可能有什么目的)。你可以使用块重写它location
:
location ~ ^[^\.]*[^\./]$ {
# No leading '/' like in the Apache rule
return 301 $uri/;
# rewrite (.*) $uri/ permanent;
# has the same effect
}
正如已经指出的那样沃姆布尔和理查德,第二个条件应该使用 进行转换try_files
。
总而言之,您的重写规则应该是:
location ~ ^[^\.]*[^\./]$ {
return 301 $uri/;
}
location / {
try_files $uri $uri/ index.php;
}