.htacces(x2)到nginx重写 - 子目录中的不同规则(RazorCMS)

时间:2015-09-08 23:33:27

标签: .htaccess nginx url-rewriting

问题是关于翻译RazorCMS(razorcms.co.uk)重写规则,但我认为答案可以是一般的。

我有两个.htacces文件。首先是在主目录(/)中。我翻译了:

RewriteRule ^(.*)$ index.php?path=$1 [L,QSA]

location / { try_files $uri $uri/ @rewrite; }
location @rewrite { rewrite ^/(.*)$ /index.php?path=$1; }

这个没有问题。

第二个.htacces文件位于子目录(/ rars)中。 内容是:

RewriteRule ^login/u/(.*)/p/(.*)$ index.php?login=1&u=$1&p=$2 [L,QSA]
RewriteRule ^login index.php?login=1 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?path=$1 [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L,QSA]

我试图将其翻译成不同的规则:

location /login { rewrite ^/login/u/(.*)/p/(.*)$ /index.php?login=1&u=$1&p=$2 break; }
location /login { rewrite ^/login /index.php?login=1 break; }
location /rars { if (!-e $request_filename){ rewrite ^(.*)$ /index.php?path=$1; } }

......但它不起作用。

如果第二个.htaccess在子目录中,如何将.htaccess规则转换为Nginx重写?你能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

Nginx没有每个目录上下文,因此您需要在该位置提供完整路径。尝试:

location /rars/login { rewrite ^/rars/login/u/(.*)/p/(.*)$ /rars/index.php?login=1&u=$1&p=$2 break; }
location /rars/login { rewrite ^/rars/login$ /rars/index.php?login=1 break; }
location /rars { if (!-e $request_filename){ rewrite ^/rars/(.*)$ /rars/index.php?path=$1; } }