将Apache重写转换为Nginx

时间:2016-06-09 21:42:14

标签: apache .htaccess nginx

我有这个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;
}

但它不起作用,任何想法?

2 个答案:

答案 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中的服务器块内,否则它将全部转换。

https://winginx.com/en/htaccess