2016-06-09 89 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

感謝兄弟,它的工作 –