Iis-7
IIS 7 URL 僅在沒有文件、子目錄或查詢字元串時重寫
(我在 StackOverflow 上發布了這個問題,因為搜尋答案顯示了 StackOverflow 上的相關問題,這些問題得到了答案和許多贊成票。但到目前為止,我的問題贏得了反對票和“離題”的近距離投票,所以我想在這裡提問它可能被認為更切題。)
我想做一個 URL 重寫(如果需要,或者重定向,就像在這個回答的問題中一樣),除了我希望它只在請求的 URL 只是站點根目錄(沒有文件或子目錄並且沒有查詢)時重寫/重定向字元串)。
即我只想請求TheSite.net重寫/重定向到TheSite.net/home.htm,但請求TheSite.net/FAQ.htm或TheSite.net/sub或TheSite.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>