2013-01-15 51 views
0

是的,我知道這已被問了數百次。但我找不到實際可行的版本。目前,我目前使用的所有功能目前都在刪除.php,但那是問題出現的時間。我網站上的幾個頁面取決於$_GET請求,例如profile因此,當您訪問url http://www.example.com/profile?username=System時,您將獲得404,而沒有?username=System,則可以正常工作。當前的代碼我已經是刪除網址中的後綴

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php 
+0

你有你的Al lowOrverride設置爲全部?在xammp和http-conf中?還把選項索引FollowSymLinks包括ExecCGI在你的http.conf –

+0

這是託管在遠程服務器上,所以我不知道,但在我決定改變頁面系統之前,重寫像這樣工作得很好。但是,然後頁面由index.php完成?page = profile&username = System – ChocCookieRaider

+0

由於規則集中的條件不匹配,顯然沒有文件夾'http://www.example.com/ profile?username = System'但是,哪個腳本應該獲取傳入URL中傳遞的參數。即'username = System',名爲'profile'的腳本(profile.php)或另一個不在URL中的名稱,如'index.php'? –

回答

2

你需要[QSA](查詢字符串附後)在你重寫規則的結尾。

RewriteRule ^(.*)$ $1.php [QSA] 
+0

剛試過這個,遺憾的是沒有效果。不過謝謝。 – ChocCookieRaider

+1

沒有查詢**追加**,因此該標誌什麼也不做。 –

+0

@faa在URL http://www.example.com/profile?username = System中,肯定有一個要包含的查詢。 – ceejayoz

1

你可以試試這個:

RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{QUERY_STRING} .  [NC] 
RewriteCond %{REQUEST_URI} ^/([^/]+) [NC] 
RewriteRule .* %1.php    [L] 

將映射默默地這個

http://www.example.com/ScriptName?key1=val1

要:

http://www.example.com/ScriptName.php?key1=val1

+0

完美工作,除了一個小問題。當沒有查詢訪問頁面時,會出現404錯誤。 – ChocCookieRaider

+0

這就是預期的行爲,因此'RewriteCond%{QUERY_STRING}。 [NC]',因爲我假定頁面「http:// www.example.com/ScriptName」,例如,不存在。但是,如果您仍然希望將該頁面映射到帶有名稱的腳本,而無需查詢,則只需從該組規則中刪除該行即可。 –