IIS URL 重写和 Web.config
Posted
技术标签:
【中文标题】IIS URL 重写和 Web.config【英文标题】:IIS URL Rewrite and Web.config 【发布时间】:2011-05-23 13:02:30 【问题描述】:我对 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>
出现了几个问题:
-
我什至不知道将文件放在哪里。有一个用户根目录,一个htdocs目录,我都试过了,不开心。
我什至不知道该帐户是否可以进行重写,我正在尝试找出答案。
【问题讨论】:
总是,虽然我现在不能使用它......但是为了将来,或者也许是为了帮助别人:) 【参考方案1】: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>
【讨论】:
试图了解这些地图,您的回答帮助很大。谢谢。我的 +1 @CodeSherpa 我相信 Tomek 给出了正确的解决方案:只需更改您的解决方案:添加<conditions><add input="HTTPS" pattern="off" /></conditions>
并可能使用 ^register\.aspx$
(注意 \ 字符 - 这将确保只有 register.aspx
重定向,而不是register2aspx
等)。另外——确保安装了 URL Rewrite Module(它是单独下载的 = 默认情况下不与 IIS 捆绑)。
@LazyOne 你能帮我看看***.com/questions/19904849/…
@SHEKHARSHETE 这是不同的:这里是 URL 重写模块,而你的是实际的 .NET 配置(它的工作方式有点不同,AFAIK,并且有细微差别,我不熟悉)。
你有上面的完整示例,我应该试试吗?我是 url 重写模块的新手,所以......!【参考方案2】:
只是想指出 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
回应 cmets 的@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)=(\d2)" />
</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 为:match url="topic.php?id=39"
会怎样?
@kneidels:我刚刚更新了答案,看看是否有帮助
+1 用于提供 iis.net 文档的链接(我看到现在重定向到 docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/…)【参考方案3】:
刚刚尝试了这条规则,它适用于 GoDaddy 主机,因为他们已经为每个 IIS 7 帐户安装了 Microsoft URL 重写模块。
<rewrite>
<rules>
<rule name="enquiry" stopProcessing="true">
<match url="^enquiry$" />
<action type="Rewrite" url="/Enquiry.aspx" />
</rule>
</rules>
</rewrite>
【讨论】:
感谢您提到正在安装的模块,我意识到我没有安装它并设法克服了我的问题:)以上是关于IIS URL 重写和 Web.config的主要内容,如果未能解决你的问题,请参考以下文章