IIS URL重写和Web.config中
我不明白有关IIS什么,但我想解决所有重定向访问者的这个问题domain.com/page到domain.com/page.htmlIIS URL重写和Web.config中
<?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:您已声明重写映射..但尚未创建任何将使用它的规则。它自己的RewriteMap完全没有。
2)下面是你如何能做到这(它不会使用重写地图 - 只有规则,这是罚款重写少量/重定向):
此规则将做某个确切重写(内部重定向)/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>
规则#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>
试图了解这些地图,你的答案帮助了很多。谢谢。我的+1 – AYK 2012-11-07 08:49:42
@CodeSherpa我相信Tomek给了一点正确的解决方案:只是改变你的:添加'
@LazyOne可以帮助我出来http://stackoverflow.com/questions/19904849/url-mapping-works-on-localhost-but-not-on-production-server-in-asp-net – 2013-11-11 11:27:26
刚刚尝试过这个规则,并且它与GoDaddy托管工作,因为他们已经为每个IIS 7帐户安装了Microsoft URL重写模块。
<rewrite>
<rules>
<rule name="enquiry" stopProcessing="true">
<match url="^enquiry$" />
<action type="Rewrite" url="/Enquiry.aspx" />
</rule>
</rules>
</rewrite>
感谢您提到正在安装的模块,我意识到我没有安装它并设法克服我的问题:) – lappy 2014-10-04 08:36:23
只是想指出有缺失的东西一件事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
来自原始网址。 我没有测试过,但它应该可以工作。
总是,虽然我现在不能使用它......但对于未来,或者可能帮助其他人:) – 2011-07-18 18:00:56