.htaccess 到 nginx 规则

.htaccess 到 nginx 规则

我在这里和其他社区论坛上读了很多帖子,也尝试了一些 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;
}

相关内容