我将一些.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脚本中.
最佳答案
位置块是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;
}