Php

nginx重寫規則用/替換.php結尾

  • August 23, 2011

基本上,我希望將“.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,因此重寫必須在外部,因為 URLlocation ~ .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-rewriteexample.com/questions/banana

看看人們如何為DrupalWordpress設置乾淨的 URL 。本質上,對不存在的文件的每個請求都被重寫為/index.php?q=$1,其中 index.php 會查看“q”變數以找出它應該做什麼。

引用自:https://serverfault.com/questions/304162