我对IIS没有任何了解,但我正在尝试解决将所有访问者重定向到domain.com/page到domain.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>
出现了一些问题:
答案 0 :(得分:108)
1)您现有的web.config:您已声明重写映射..但尚未创建任何将使用它的规则。 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>
答案 1 :(得分:13)
只想指出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 Rewrite Module Configuration Reference
回应评论中的@kneidels问题;要匹配网址: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
来自原始网址。
我没有测试过这个,但它应该可以工作。
答案 2 :(得分:10)
刚试过这个规则,它与GoDaddy托管一起工作,因为他们已经为每个IIS 7帐户安装了Microsoft URL重写模块。
<rewrite>
<rules>
<rule name="enquiry" stopProcessing="true">
<match url="^enquiry$" />
<action type="Rewrite" url="/Enquiry.aspx" />
</rule>
</rules>
</rewrite>