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>
出现了一些问题:
- 我不知道甚至把文件放在哪里。 有一个用户根目录和一个htdocs目录,我尝试了两个,没有喜悦。
- 我甚至不知道账户是否可以重写,我正试图找出答案。
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
其中a
是0-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>