问题是关于翻译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重写?你能指出我正确的方向吗?
答案 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; } }