2014-07-12 24 views
-1

我使用IIS 7,並試圖建立一個重寫規則,將查找以下網址:「?」URL Rewrite將正則表達式匹配到「?」在URL

http://www.example.com/Toys/?GOOGLE/USA/Wood/trains 

我用下面的web.config如果我忽略其運作來自網址。

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <system.webServer> 
     <rewrite> 
      <rules> 
       <rule name="Toys" stopProcessing="true"> 
        <match url="^Toys/(.+)/(.+)/(.+)/(.+)" /> 
        <action type="Rewrite" url="/toys/index.cfm?a={R:1}&amp;b={R:2}&amp;c={R:3}&amp;d={R:4}" /> 
       </rule> 
      </rules> 
     </rewrite> 
    </system.webServer> 
</configuration> 

他們已經有「?」硬編碼在提交給PPC搜索引擎的幾千個URL中。

回答

1

我不確定你想要完成什麼。

Toys/(.+)/(.+)/(.+)/(.+) 

Regular expression visualization

Debuggex Demo

省去了start-of-line anchor(在^)你的例子URL匹配。與主播不符,因爲在Toys之前有文字。

但是,請注意,我放在第二行的URL包含額外的路徑元素。您的正則表達式在第一組中捕獲?GOOGLE/USA/Wood/trains,因爲您的正則表達式中的每個元素是.+,它是「any character,並且儘可能多」。因爲它是greedy,它會消耗這些額外的元素。

這將是更安全的,從每一個捕捉部分排除斜線:

Toys/([^/]+)/([^/]+)/([^/]+)/([^/]+) 

Regular expression visualization

Debuggex Demo

注意區別在哪呢捕捉:不要超過四個路徑元素,只有每個捕獲組中有一個元素。

的替代方案(這是很好的,但我更喜歡上面的斜線版本)是使每個元素在你原來的正則表達式reluctant

Toys/(.+?)/(.+?)/(.+?)/(.+?) 

Regular expression visualization

Debuggex Demo

  • 貪婪導致該正則表達式部分與一樣多儘可能(只要整體正則表達式仍然可以匹配)。
  • 不情願導致該部分匹配儘可能少(只要總體正則表達式仍然可以匹配)。

請考慮書籤的Stack Overflow Regular Expressions FAQ以供將來參考。

+0

謝謝。你的正則表達式就是對的。我在第一次使用了/'s技術,但我認爲當coldfusion看到了?它抓住了整個事情。我在iis管理器中使用了iis7的模式測試器,它向我展示了我想看到的內容,但是coldfusion正在做一些不同的事情 – steve

+0

不客氣。樂意效勞。 – aliteralmind