2010-10-02 23 views
0

如何允許訪問者使用此鏈接(www.example.com/news?id=34)以查看(www.example.com/index.php?page=news & ID = 34).htaccess中的QUERY_STRING重定向時

現在我隱藏了我的PHP文件的擴展,以使鏈接看起來不錯。當訪問者訪問(www.example.com/news)時,他們可以看到該頁面(www.example.com/index.php?page=news)。但是,當他們轉到(www.example.com/news?id=12)時,他們會收到404錯誤。

此時,PHP無法識別id參數。這是我目前在我的.htaccess文件中的內容

Options +FollowSymlinks 
RewriteEngine on 

# catch request with no querystring like /Home 
RewriteCond %{QUERY_STRING} ^$ 
RewriteRule ^([^/]+)$ /index.php?page=$1 [L] 

# make other requests with a non-empty query string go to /index.php?id=XXXXX 
RewriteCond %{QUERY_STRING} ^.*$ 
RewriteRule ^$ /index.php?id=$1 [QSA,L] 

回答

0

你的第二個測試圖案(^$)只匹配在用戶不把任何路徑信息的情況下,但包括查詢字符串(如www.example.com/?id=12)。還請注意,反向引用$1在該規則中也沒有價值。

最簡單的解決方法就是將二者結合起來的規則,因爲你可以使用QSA標誌做追加id=#部分爲您的工作:

Options +FollowSymlinks 
RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/]+)$ /index.php?page=$1 [QSA,L] 
+0

我真的真的真的真的真的很感謝你的幫助。你完全保存了我的一天。 – 2010-10-02 17:47:21

+0

@Eyad:很高興幫助! – 2010-10-02 17:54:55

0

您的第一條規則的條件因查詢不爲空而失敗。嘗試沒有那個條件,但在以下的條件,而不是:

RewriteCond $1 !=index.php 
RewriteRule ^([^/]+)$ /index.php?page=$1 [L]