IIS URL重写和Web.config

我不明白IIS的任何内容,但是我正试图解决将所有访问者redirect到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> 

出现了一些问题:

  1. 我不知道甚至把文件放在哪里。 有一个用户根目录和一个htdocs目录,我尝试了两个,没有喜悦。
  2. 我甚至不知道账户是否可以重写,我正试图找出答案。

1)你现有的web.config:你已经声明了rewrite map ..但还没有创build任何规则来使用它。 它自己的RewriteMap完全没有。

2)下面是你可以做到这一点(它不使用重写映射 – 规则,这是less量的重写/redirect罚款):

这个规则将做单一的重写(内部redirect) /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将做与上面相同,但会做301redirect(永久redirect),其中URL将在浏览器中更改。

 <system.webServer> <rewrite> <rules> <rule name="SpecificRedirect" stopProcessing="true"> <match url="^page$" /> <action type="Redirect" url="/page.html" /> </rule> </rules> </rewrite> </system.webServer> 

规则#3将尝试执行这样的重写任何URL如果有这样的文件扩展名为.html(即/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的答案中缺less一件事情(我只是在答案下评论,但没有足够的代表)

在永久redirect的规则#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重写模块configuration参考

回应@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其中a0-9之间的任何数字,b也是0-9之间的任何数字。 然后它将redirect到/newpage/xy ,其中xy来自原始URL。 我没有testing过,但应该可以工作。

只是尝试了这个规则,它与GoDaddy托pipe,因为他们已经为每个IIS 7帐户安装了Microsoft URL重写模块。

 <rewrite> <rules> <rule name="enquiry" stopProcessing="true"> <match url="^enquiry$" /> <action type="Rewrite" url="/Enquiry.aspx" /> </rule> </rules> </rewrite>