2011-06-22 51 views
0

我試圖讓這個使用ISAPI重寫(mod_rewrite的)相匹配的正則表達式:正則表達式重寫的aspx IID =

www.website.com/product.aspx?iid=201 

我已經試過:

^(.*)/product.aspx?iid=201 

而且:

^(.*)/product\.aspx\?iid=201 

這兩個表達式似乎都不符合它。

+0

高興地看到你更新了201-值,即困惑我:-) –

+0

這本來是一個簡單的修復:),但它只是一個錯字。 – JMC

+1

第二個RE看起來對我很正確;它怎麼不適合你? –

回答

1

下面的規則將重定向(301)從domain.com/product.aspx?iid=201domain.com/product/productname

RewriteEngine On 
RewriteBase/

RewriteCond %{QUERY_STRING} ^iid=201 [NC] 
RewriteRule ^product\.aspx$ /product/productname [NC,R=301,L] 

你要記住 - Apache的mod_rewrite,赫利的ISAPI_Rewrite V3,IIS 7.x的 - 的RewriteRule指令(或在IIS中等效)只能與URL的「路徑」部分一起使用。如果您需要使用域名,協議,服務器端口,查詢字符串等 - 您必須使用RewriteCond

上述規則完全可行 - 我自己的一臺服務器上有Helicon ISAPI_Rewrite v3(IIS6,否則它將是IIS7和標準的URL重寫模塊)。

如果您有任何問題 - 請詢問,但最有可能我會在幾個小時內做出響應 - 這是凌晨3點在這裏:)

+0

謝謝,我不會在明天試試它,所以不用擔心。 – JMC

+0

好的解決方案。我不得不添加一個問號?到替換表達式的末尾,以防止將查詢字符串添加到URL的末尾。它看起來像這樣:RewriteRule^product \ .aspx $/Product/productname? [NC,R = 301,L]。 – JMC

+0

@JMC嗯......必須是一些特殊的設置,因爲當我在我的服務器上測試時,它沒有添加它 - 需要檢查文檔。無論如何它現在工作正常:) – LazyOne

1
^(.*)/product.aspx\?iid=201 

在這裏工作:

http://www.regexplanet.com/simple/index.html

因此,我希望這個項目在IIS中也

工作,如果你是使用Java,你會逃避你的第二個解決方案是這樣的:

"^(.*)/product\\.aspx\\?iid=201" 

也許IIS喜歡那種逃避風格(canno Ť這裏測試)