我无法将一些 .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;
}