我有这个htaccess代码:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
我想转换为nginx重写规则,我试过
if (!-e $request_filename){
rewrite ^(.+)$ /index.php?url=$1 break;
}
但它不起作用,任何想法?
答案 0 :(得分:0)
等效的重写将是:
if (!-e $request_filename){
rewrite ^/?(.*)$ /index.php?url=$1 last;
}
由于nginx
URI包含您的脚本可能不想要的前导/
。此外,.php
文件可能在不同的位置块中处理,因此您需要使用last
。
在没有use of an if
block的情况下编写此代码的其他方式:
首先,使用前导/
:
location / {
try_files $uri $uri/ /index.php?url=$uri;
}
其次,没有前导/
:
location / {
try_files $uri $uri/ @rewrite;
}
location @rewrite {
rewrite ^/?(.*)$ /index.php?url=$1 last;
}
所有nginx
指令均为documented here。
答案 1 :(得分:0)
将您的.htaccess转换为nginx。我只是从Apache 2.4切换到Nginx 1.18.0,它可以工作,但是所有重写行都应该在nginx conf中的服务器块内,否则它将全部转换。