2011-12-23 21 views
0

我是從的.htaccess切換到nginx.conf和我有麻煩翻譯本線nginx的:的.htaccess到nginx.conf重寫規則

RewriteBase/
RewriteCond $1 !^(index\.php|assets|uploads|fav.ico) 
RewriteRule ^(.*)$ index.php/$1 [L] 

我嘗試這樣做:

if ($1 !~ "^(index\.php|assets|uploads|fav.ico)"){ 
     set $rule_0 1$rule_0; 
} 
if ($rule_0 = "1"){ 
     rewrite ^/(.*)$ /index.php/$1 last; 
} 

這:

location /$ { 
    index  index.php; 
    # Removes index.php from URLs 
    rewrite_log on; 
    if (!-e $request_filename) { 
     rewrite ^/(.*)$ /index.php/$1 last; 
    } 
} 

但沒有工作:(我在做什麼錯

謝謝。

回答

0

嘗試翻譯這段代碼。

RewriteBase/
RewriteRule ^(index\.php|assets|uploads|fav.ico) - [L] 
RewriteRule ^(.*)$ index.php/$1 [L] 

您遇到的問題是因爲apache首先在RewriteCond之前執行RewriteRule。你的nginx代碼是按順序運行的,所以當你讀出它時,$ 1還沒有設置。

我不知道nginx的,但我認爲這可能是你會得到什麼,如果你翻譯以上:

rewrite ^/(index\.php|assets|uploads|fav.ico) - last 
rewrite ^/(.*)$ /index.php/$1 last; 

否則

rewrite ^/(index\.php|assets|uploads|fav.ico).*$ $0 last 
rewrite ^/(.*)$ /index.php/$1 last;