2012-08-22 60 views
1
RewriteEngine On 

RewriteCond search.php 
RewriteCond {$QUERYSTRING} category=restauran(.*)city=Montrea(.*)$ 
RewriteRule search.php.* http://www.mynewsite.fak/$1 [P] 

的想法是重定向任何呼叫的查詢字符串與category=restaurantcity=Montreal到search.php中以http://www.mynewsite.fak與路徑,例如完整:.htaccess文件中的這個重寫規則有什麼問題?

myoldsite.fak/folderA/folderB/search.php?blah=blah... 

mynewsite.fak/folderA/folderB/search.php?blah=blah... 

回答

1

三件事我注意到了。

第一個問題是,您在示例中拼錯了查詢字符串變量。它應該是{$QUERY_STRING}。這可能足以解決問題,但還有其他一些建議。

第二個是你的RewriteCond查詢字符串正在爲每個值做一個貪婪匹配。嘗試更新以匹配可以專門進入字段的內容,例如\w+

第三個是RewriteRule本身。您可以從當前頁面名稱中刪除.*,並將規則更改爲更適合的內容,例如[R=301, L]。這將導致規則與「HTTP 301(永久重定向)」標題「重定向」,並且L指出這是應用的最後一條規則。

總之,這應該(可能)的工作:

RewriteEngine On 

RewriteCond {$QUERY_STRING} category=(\w+)&city=(\w+)$ 
RewriteRule ^search.php$ http://www.mynewsite.fak/$1 [R=301, L] 
+0

感謝您的回覆, 我想使用[P],因爲這是一些ajax應用程序使用的調用,所以它需要對客戶端透明,因爲我無法更改所有這些應用程序。而且我的匹配是貪婪的,因爲類別和城市參數在QS中不一定是正確的,並且不一定在最後。嘗試它現在像這樣,重寫不會發生 RewriteCond {$ QUERY_STRING} category = restaurant&city = Montreal RewriteRule^search.php $ http://www.mysite.fak/data/testing/$1 [P] 當然是兩個服務器上的/ data/testing目錄中的search.php文件。 –