2013-07-21 99 views
0

我想從這些工作規則移動Nginx的重寫一些匹配規則不工作

location = /contact { 
    rewrite ^(.*)$ /index.php?v=contact last; break; 
} 

location = /terms { 
    rewrite ^(.*)$ /index.php?v=terms last; break; 
} 

location = /faq { 
    rewrite ^(.*)$ /index.php?v=faq last; break; 
} 

location = /twitter { 
    rewrite ^(.*)$ /index.php?v2=twitter last; break; 
} 

location = /facebook { 
    rewrite ^(.*)$ /index.php?v2=facebook last; break; 
} 

location = /login { 
    rewrite ^(.*)$ /index.php?v2=login last; break; 
} 

location = /privacy { 
    rewrite ^(.*)$ /index.php?v=privacy last; break; 
} 

到這樣的事情

location/{ 
    try_files $uri $uri/ =404; 
    rewrite ^/(contact|privacy|terms|faq)$ /index.php?v=$1 last; 
    rewrite ^/(twitter|facebook|login)$ /index.php?v2=$1 last; break; 
} 

但問題是,「聯繫人」,「術語','隱私','推特','臉譜'頁面正常工作,但'隱私'和'登錄'頁面扔404錯誤

有涉及「登錄」和「隱私」

+0

建議打開調試日誌,找出跟蹤這兩個404網址。 – TroyCheng

+0

@TroyCheng'open()「/ usr/share/nginx/www/privacy」失敗(2:沒有這樣的文件或目錄)'所以這根本就不是重寫 – user1612250

+0

我的意思是打開調試選項時,可以跟蹤重寫過程在error_log中,因此您可以知道它是如何重寫以及哪裏出錯的。 – TroyCheng

回答

1

其實我不喜歡既不的方法沒有其他重寫規則,它可能會工作,但它不是真正的把它寫的最好辦法,所以讓嘗試不同的東西。

location *~ ^/(contact|privacy|terms|faq)/?$ { 
    try_files $uri $uri/ /index.php?v=$1; 
} 
location *~ ^/(twitter|facebook|login)/?$ { 
    try_files $uri $uri/ /index.php?v2=$1; 
} 
location/{ 
    try_files $uri $uri/ /index.php; 
} 

O和我從來沒有聽說過一個last; break;的它可能只是工作,因爲nginx的是忽略了它的最後一部分,它要麼一個lastbreak

+0

這個失敗的nginx配置文件,也不是最好的解決方案,因爲在index.php不可用的情況下,它將開始重定向循環並贏得拋出錯誤(只有在重定向過多之後) 我相信'last'和'休息'混合使用,因爲'最後;'使劇本重複和php執行,'休息';結束當前位置部分[http://stackoverflow.com/a/13981316/1612250](http://stackoverflow.com/a/13981316/1612250) – user1612250