从 .htaccess 转换 nginx 规则

从 .htaccess 转换 nginx 规则

我无法将一些 .htaccess 规则转换至 nginx 服务器。

RewriteRule ^$ index.php [L]
RewriteRule ^([A-Za-z0-9-]+)?$ index.php?section=$1 [L]
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ index.php?section=$1&go=$2 [L]
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ index.php?section=$1&go=$2&action=$3 [L]

有人可以协助转换并解释这些正则表达式如何转换为 nginx 吗?

我不确定语法,根据 nginx 文档,我尝试了以下内容:

server {
  rewrite ^([A-Za-z0-9-]+)?$ index.php?section=$1&go=$2;
}

我也尝试过在根位置块内进行操作,如下所示。但我不确定try_files这会有什么影响。

location / {

    rewrite ^$ /index.php break;
    rewrite ^([A-Za-z0-9-]+)?$ /index.php?section=$1 break;
    rewrite ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ /index.php?section=$1&go=$2 break;
    rewrite ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ /index.php?section=$1&go=$2&action=$3 break;
    rewrite ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ /index.php?section=$1&go=$2&action=$3&id=$4 break;

    try_files $uri $uri/ /index.php?$args;
}

但这似乎不起作用。这是否需要先放置在位置块内?

我正在测试的 URL 如下。主机名已被删除,因为我无权共享它。

http://www.example.com/entry
http://www.example.com/volunteers
http://www.example.com/contact

基本上,页面加载时就像访问 index.php 一样,但部分并未加载(如果这有道理的话)。似乎没有任何东西被传递到 index.php 脚本中。

答案1

location街区是您的rewrite指令,所以你做对了。

您的配置中唯一明显缺少的是/正则表达式中的前导:

location / {
  rewrite ^/$ /index.php break;
  rewrite ^/([A-Za-z0-9-]+)?$ /index.php?section=$1 break;
  rewrite ^/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ /index.php?section=$1&go=$2 break;
 }

相关内容