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> 

出现了几个问题:

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

总是,虽然我现在不能使用它......但对于未来,或者可能帮助其他人:) – 2011-07-18 18:00:56

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> 
+2

试图了解这些地图,你的答案帮助了很多。谢谢。我的+1 – AYK 2012-11-07 08:49:42

+2

@CodeSherpa我相信Tomek给了一点正确的解决方案:只是改变你的:添加''也许使用'^ register \ .aspx $ '(注意\字符 - 这将确保只有'register.aspx'将被重定向,而不是'register2aspx'等)。另外 - 确保安装了** URL重写模块**(默认情况下,它是单独下载=未与IIS捆绑)。 – LazyOne 2012-12-17 23:15:25

+0

@LazyOne可以帮助我出来http://*.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> 
+2

感谢您提到正在安装的模块,我意识到我没有安装它并设法克服我的问题:) – 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其中a0-9和B之间的任意数字也0-9之间的任何数字。 然后它会重定向到/newpage/xy,其中xy来自原始网址。 我没有测试过,但它应该可以工作。

+0

嘿。此解决方案适用于statis文件。它如何看起来与匹配网址:'match url =“topic.php?id = 39”'? – kneidels 2015-05-04 11:30:26

+1

@kneidels:我刚更新了答案,看看是否有帮助 – Hjalti 2015-05-05 15:10:33