2013-03-22 25 views
0

我需要從http://example.com/file.php?id=test&cat=category重寫URL到http://example.com/file?test&cat=category 重寫URL我只實現改寫到/file與路徑/file.php與mod_rewrite的

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule ^/?(\w+)$ $1.php [QSA,NC,L] 

如何重寫URL的休息嗎?第二個問題:是否可以阻止默認的URL訪問,因此用戶必須使用重寫的URL?

回答

1

要檢查的值在查詢字符串,你需要使用的RewriteCond與QUERY_STRING變量,就像這樣:

RewriteCond %{QUERY_STRING} ^([a-z]+)&cat=([a-z]+)$ 

這是說,如果查詢字符串包含一系列的重寫規則只能執行連續的小寫字母后跟一個&符號,然後是「cat =」,然後是另一組連續的字母。捕獲組可以在未來的重寫規則使用%1%2這樣使用:

RewriteRule ^([a-z]+)$ $1.php?id=%1&cat=%2 [L] 

你不想使用QSA標誌,因爲這將用戶的無效查詢字符串附加到重寫URL的末尾。您可能仍然希望使用NC標誌來忽略匹配模式中的大小寫,但如果可能,最好只使用小寫字母文件名。

關於阻止請求到定稿(.PHP)的路徑,我不能想辦法做到這一點,因爲即使是敲定URL有過的.htaccess規則來運行,因此禁止訪問,將打破重定向。

+0

感謝您的回答,它真的幫了我很多。 – 2013-03-23 22:09:37