2016-06-09 68 views
1

我有这样的htaccess代码:转换阿帕奇改写为Nginx的

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

等效改写为:

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

+0

感谢兄弟,它的工作 –