[英]IIS URL Rewrite and Web.config
我對 IIS 一無所知,但我正在嘗試解決將所有訪問者重定向到example.com/page
到example.com/page.html
的問題
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.webServer>
<rewrite>
<rewriteMaps>
<rewriteMap name="StaticRedirects">
<add key="/page" value="/page.html" />
</rewriteMap>
</rewriteMaps>
</rewrite>
</system.webServer>
</configuration>
出現了幾個問題:
1) 您現有的 web.config:您已經聲明了 rewrite map .. 但尚未創建任何使用它的規則。 RewriteMap 本身完全沒有任何作用。
2)下面是你如何做到這一點(它不使用重寫映射 - 僅規則,這對於少量的重寫/重定向很好):
此規則將 SINGLE EXACT 重寫(內部重定向) /page
到/page.html
。 瀏覽器中的 URL 將保持不變。
<system.webServer>
<rewrite>
<rules>
<rule name="SpecificRewrite" stopProcessing="true">
<match url="^page$" />
<action type="Rewrite" url="/page.html" />
</rule>
</rules>
</rewrite>
</system.webServer>
此規則 #2 將執行與上述相同的操作,但將執行 301 重定向(永久重定向),其中 URL 將在瀏覽器中更改。
<system.webServer>
<rewrite>
<rules>
<rule name="SpecificRedirect" stopProcessing="true">
<match url="^page$" />
<action type="Redirect" url="/page.html" />
</rule>
</rules>
</rewrite>
</system.webServer>
如果存在帶有 .html 擴展名的此類文件,規則 #3 將嘗試對任何 URL 執行此類重寫(即,對於/page
,它將檢查/page.html
是否存在,如果存在,則發生重寫):
<system.webServer>
<rewrite>
<rules>
<rule name="DynamicRewrite" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{REQUEST_FILENAME}\.html" matchType="IsFile" />
</conditions>
<action type="Rewrite" url="/{R:1}.html" />
</rule>
</rules>
</rewrite>
</system.webServer>
只是想指出 LazyOne 的答案中缺少的一件事(我會在答案下發表評論,但沒有足夠的代表)
在永久重定向的規則 #2 中,缺少一些東西:
redirectType="Permanent"
所以規則 #2 應該是這樣的:
<system.webServer>
<rewrite>
<rules>
<rule name="SpecificRedirect" stopProcessing="true">
<match url="^page$" />
<action type="Redirect" url="/page.html" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
</system.webServer>
編輯
有關如何使用 URL 重寫模塊的更多信息,請參閱此出色的文檔: URL 重寫模塊配置參考
回應評論中的@kneidels 問題; 要匹配 url: topic.php?id=39
可以使用如下內容:
<system.webServer>
<rewrite>
<rules>
<rule name="SpecificRedirect" stopProcessing="true">
<match url="^topic.php$" />
<conditions logicalGrouping="MatchAll">
<add input="{QUERY_STRING}" pattern="(?:id)=(\d{2})" />
</conditions>
<action type="Redirect" url="/newpage/{C:1}" appendQueryString="false" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
</system.webServer>
這將匹配topic.php?id=ab
其中a
是0-9
之間的任意數字, b 也是0-9
之間的任意數字。 然后它將重定向到/newpage/xy
,其中xy
來自原始 url。 我沒有對此進行測試,但它應該可以工作。
剛剛嘗試了這條規則,它適用於 GoDaddy 托管,因為他們已經為每個 IIS 7 帳戶安裝了 Microsoft URL 重寫模塊。
<rewrite>
<rules>
<rule name="enquiry" stopProcessing="true">
<match url="^enquiry$" />
<action type="Rewrite" url="/Enquiry.aspx" />
</rule>
</rules>
</rewrite>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.