我在.htaccess文件有這個RerwiteRule遷移網站代碼停留在同一個域
RewriteEngine On
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]
我所試圖做的是添加其他重寫規則,以這種配置,使舊網址像這樣將被重定向到網站的根目錄
http://www.acme.com/category.php?id=6
http://www.acme.com/product.php?id=183&category=
我知道「category.php」和「product.php」現在是一個無效的字符串。使用「category.php」作爲一個例子,我試圖改變配置成爲這個
RewriteEngine On
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^category.php(.*)/[L,R=301]
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]
這將重定向如下
http://www.acme.com/category.php?id=112 -> http://www.acme.com/?id=112
我有兩個問題
- 我不希望追加查詢字符串。我沒有指定 [QSA]
- 如果我直接輸入根目錄
www.acme.com
,則頁面將不會顯示 ,除非我刪除剛添加的行。爲什麼我的新RewriteRule 會影響不以「category.php」開頭的URL?
[編輯]
我也試過這個,而不是上面的重定向,但我仍然似乎正在被應用
RewriteRule ^category.php /holdingPage.php [L]
謝謝喬恩,那就是訣竅。然而,你能解釋一下爲什麼把RewriteRule移動到RewriteCond上的行爲有所不同嗎?我認爲RewriteCond只是匹配「文件」和「目錄」的請求 – Brad 2012-07-17 13:39:59
@Brad是啊,請參閱上面的編輯 – 2012-07-17 15:15:35
謝謝喬恩。我很感激你花時間來解釋。 – Brad 2012-07-18 11:38:51