nginx重寫規則用/替換.php結尾
基本上,我希望將“.php”替換為“/”。我試圖將我的規則放在 fastcgi 所在的同一位置。
location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params; rewrite ^(.+)\.php$ /$1; }
但是,當我使用這些設置重新啟動 nginx 時,它給了我一個 500 Internal Server Error 並且我什至無法讓伺服器向我顯示任何東西。這是因為快速cgi嗎?我該如何解決這個問題?
我的系統:nginx / php5-fpm / apc / php5-memcache / Ubuntu 10.10
從本質上講,您的總體計劃存在很多問題。首先,由於您要刪除 .php,因此重寫必須在外部,因為 URL在
location ~ .php$
重寫之前不會以 .php 結尾。其次,你是倒退的。您希望 URL執行,因此需要重寫rewrite``http://www.example.com/foo/``foo.php
rewrite ^(.+)/ $1.php;
但這意味著您網站上的每個目錄都需要一個匹配的 .php 文件,因為您將不再能夠自動使用 index.php。此外,如果 nginx 在重寫之前沒有刪除重複的斜杠,如果有人輸入錯誤的地址,
http://www.example.com/foo//
那麼它將執行/foo/.php
.最後,您打算創建多少個 PHP 文件?你真的認為 serverfault 有這個問題的 304162.php 文件嗎?(不是 serverfaults 的 URL 會匹配你的重寫,因為它不以 結尾
/
,我認為他們也不使用 PHP)通常,乾淨的 URL 通過聲明一個特定的位置(例如
/questions/
)然後在該 URL 之後重寫所有內容以由單個腳本執行來工作:rewrite ^/questions/(.*)$ /questions.php?path=$1 last;
你也可以做類似的事情
rewrite ^/questions/([0-9]+)(/.*)?$ /questions.php?qid=$1&extra=$2 last;
因此,URL 可能會因為沒有數字問題 ID 而被拒絕
example.com/questions/1
example.com/questions/1/
example.com/questions/1/how-do-I-rewrite
。example.com/questions/banana
看看人們如何為Drupal或Wordpress設置乾淨的 URL 。本質上,對不存在的文件的每個請求都被重寫為
/index.php?q=$1
,其中 index.php 會查看“q”變數以找出它應該做什麼。