Iis-7

IIS 7 URL 僅在沒有文件、子目錄或查詢字元串時重寫

  • June 27, 2019

(我在 StackOverflow 上發布了這個問題,因為搜尋答案顯示了 StackOverflow 上的相關問題,這些問題得到了答案和許多贊成票。但到目前為止,我的問題贏得了反對票和“離題”的近距離投票,所以我想在這裡提問它可能被認為更切題。)

我想做一個 URL 重寫(如果需要,或者重定向,就像在這個回答的問題中一樣),除了我希望它只在請求的 URL 只是站點根目錄(沒有文件或子目錄並且沒有查詢)時重寫/重定向字元串)。

即我只想請求TheSite.net重寫/重定向到TheSite.net/home.htm,但請求TheSite.net/FAQ.htmTheSite.net/subTheSite.net/?parameter=yep不是重寫/重定向。

我已經重寫和重定向到工作,例如:

<system.webServer>
   <rewrite>
     <rules>
       <clear />
       <rule name="Rewrite home page to Home.htm" stopProcessing="true">
         <match url="^" />
         <action type="Rewrite" url="/Home.htm" />
       </rule>
     </rules>
   </rewrite>
</system.webServer>

我也嘗試過<match url="^$" />and <match url="TheSite.net" />,但那些自然也會重寫 TheSite.net/?parameter=yep ,我需要它不要那樣做。也許如果有另一個屬性<match>可以讓我匹配空查詢字元串,但如果有查詢字元串則不匹配(或者如果斜杠後面有任何內容,則不匹配)?

我希望一個適當的規則可以做我想要的,但是我的 RegEx 語法技能不能勝任這項任務,而且我還沒有找到一個足夠接近的例子。

在這個站點上,我看到IIS URL 重寫模組查詢字元串參數看起來可能是可以工作的那種東西,儘管我想要的是相反的 - 只有在域名之後沒有查詢字元串或其他內容時才重寫在網址中。

好的,經過對奇怪案例的完整測試,我似乎通過玩Condition找到了解決方案,即:

<rule name="Rewrite home page to Home.htm" stopProcessing="true">
 <match url="^$" />
 <conditions>
   <add input="{QUERY_STRING}" pattern=".+=(.+)" negate="true" />
 </conditions>
 <action type="Rewrite" url="/Home.htm" />
</rule>

引用自:https://serverfault.com/questions/973161