2012-07-18 69 views
-1

正如我曾經遇到過很幸運與管理得到查詢字符串來重定向正確以前只是路過查詢字符串參數,和整個本網站和站長世界的涵蓋範圍廣泛的建議供查詢字符串重定向似乎是「處理它作爲一個RewriteCond查詢字符串」,我試圖使用以下類型的規則爲一組約10個URL。的RewriteCond%{QUERY_STRING}中的mod_rewrite(動態到靜態URL)無法正常工作

實例網址:

http://www.example.org/training_book.asp?sInstance=1&EventID=139 

我到目前爲止有:

RewriteCond %{QUERY_STRING} ^training_book.asp\?sInstance=1&EventID=139 
RewriteRule /clean-landing-url/ [NC,R=301,L] 

所以,我希望發生的是

http://www.site.org/training_book.asp?sInstance=1&EventID=139 301> http://www.site.org/clean-landing-url 

,而是正在發生的事情是這樣的:

http://www.site.org/training_book.asp?sInstance=1&EventID=139 301> http://www.site.org/training_book.asp/?sInstance=1&EventID=139 

它在查詢字符串之前追加正斜槓,然後解析完整的URL(顯然是404ing。)

我錯過了什麼?這是真正的%{QUERY_STRING}參數的正則表達式問題嗎?

在此先感謝!

編輯 -

這是我到目前爲止的地方。

基於從下面@TerryE的建議,我已經嘗試實現以下規則。

我有具有以下參數的一組URL的:

http://www.example.org/training_book.asp?sInstance=1&EventID=139 
http://www.example.org/training_book.asp?sInstance=2&EventID=256 
http://www.example.org/training_book.asp?sInstance=5&EventID=188 

這需要重定向到

http://www.example.org/en/clean-landing-url-one 
http://www.example.org/en/clean-landing-url-two 
http://www.example.org/en/clean-landing-url-three 

這是確切的我目前使用的htaccess文件結構,包括「簡單」redir的完整示例它們是目前工作正常(注 - http://example.com>http://www.example.com重定向在httpd.conf執行)學分

#301 match top level pages 
RewriteCond %{HTTP_HOST} ^example\.org [NC] 
RewriteRule ^/faq.asp /en/faqs/ [NC,R=301,L] 

在該塊中的所有URL屬於這種類型。所有這些網址都很完美。

#Redirect all old dead PDF links to English homepage. 
RewriteRule ^/AR08-09.pdf /en/ [NC,R=301,L] 

此區塊中的所有網址均屬此類型。所有這些網址都很完美。

的問題是在這裏:我仍然不能得到以下類型的URL重定向。根據@TerryE的建議,我試圖改變語法如下。下面的塊不能正常工作。

#301 event course pages 
RewriteCond %{QUERY_STRING} sInstance=1EventID=139$ 
RewriteRule ^training_book\.asp$ /en/clean-landing-url-one? [NC,R=301,L] 

的這個輸出是

http://staging.example.org/training_book.asp/?sInstance=1&EventID=139 

(這是目前適用於staging.example.org,將適用於將example.org)

(我有 「隱藏」 了一些在最初的問題中將其從training_book更改爲event_book的實際語法,但我已將其更改爲儘可能真實。)

回答

1

The documentation。 QUERY_STRING包含請求內容?。您的條件regexp應該永遠不會匹配。這使得更多的意義:

RewriteCond %{QUERY_STRING} ^sInstance=1&EventID=139$ 
RewriteRule ^event_book\.asp$ /clean-landing-url/ [NC,R=301,L] 

正斜槓是由不同的Apache過濾器(DirectorySlash)引起的。

+0

感謝您的輸入@TerryE,但這並沒有改變行爲。 example.com/news.asp正確轉到example.com/zh/news,這是一個很好的簡單重定向。 目前有一個虛擬主機設置爲在上線之前測試重定向,位於new.example.com。 這是我想重定向的確切網址,使用站點名稱的例子來代替: http://example.org/training_book.asp?sInstance=1&EventID=139 > http://new.example.com/clean-landing-url 我錯過了什麼?預先感謝您的任何進一步的想法。 – 2012-07-23 15:31:20

+0

@BobC,從第一次重定向到.../en/...,你顯然已經得到了一些可能會干擾的規則。更新您的Q以包含所有規則,以便我們可以看到發生了什麼。 – TerryE 2012-07-23 18:00:34

+0

嗨特里 - 我已根據要求更新。非常感謝您的幫助 – 2012-07-26 08:51:13