到不需要.php擴展名,我想所有的查詢,如重寫所有查詢使用mod_rewrite的重寫規則
http://mysite.com/something/otherthing?foo=bar&x=y
被改寫爲
http://mysite.com/something/otherthing.php?foo=bar&x=y
換句話說,只是使。 php擴展可選,普遍。
到不需要.php擴展名,我想所有的查詢,如重寫所有查詢使用mod_rewrite的重寫規則
http://mysite.com/something/otherthing?foo=bar&x=y
被改寫爲
http://mysite.com/something/otherthing.php?foo=bar&x=y
換句話說,只是使。 php擴展可選,普遍。
我會這樣做。基本上,如果文件不存在,請嘗試添加.php。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ $1.php [QSA,L]
喜歡的東西...
RewriteRule /something/(.+)?(.+) /something/$1.php?$2
可能會工作。
這工作:
RewriteCond %{QUERY_STRING} ^.+$
RewriteRule ^/?([^/\.]+)$ /$1.php [L]
這樣做是爲了確保有一個查詢字符串(問號加的東西),如果是檢查問號之前的東西沒有擴展名,如果是這樣,追加。 PHP。
如果你可以改變的httpd.conf和什麼,你也可以把:
ForceType application/x-httpd-php
在該文件中,因爲它會迫使所有的所謂的被PHP文件的路徑。我認爲這也適用於查詢字符串。
只匹配不帶擴展名路徑:
RewriteRule ^(([^/]+/+)*[^\.]+)$ $1.php
編輯:在我的測試中,查詢字符串被自動傳遞。如果沒有,你可以用這個代替:
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(([^/]+/+)*[^\.]+)$ $1.php?%1
這似乎並不奏效。 – dreeves 2008-10-08 17:41:31
您可能需要用反斜槓來跳過問號 – 2008-10-08 19:52:29
我試過了。我認爲查詢字符串的東西不是在RewriteRule中匹配的東西的一部分。您必須在查詢字符串上執行單獨的RewriteCond。看到我的答案。 – dreeves 2008-10-10 02:11:36