【问题标题】:IIS URL Rewrite and Web.configIIS URL 重写和 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>

出现了几个问题:

  1. 我什至不知道将文件放在哪里。有一个用户根目录,一个htdocs目录,我都试过了,不开心。
  2. 我什至不知道该帐户是否可以进行重写,我正在尝试找出答案。

【问题讨论】:

  • 总是,虽然我现在不能使用它......但是为了将来,或者也许是为了帮助别人:)

标签: asp.net iis url-rewriting web-config


【解决方案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 给出了正确的解决方案:只需更改您的解决方案:添加 &lt;conditions&gt;&lt;add input="{HTTPS}" pattern="off" /&gt;&lt;/conditions&gt; 并可能使用 ^register\.aspx$ (注意 \ 字符 - 这将确保只有 register.aspx重定向,而不是register2aspx 等)。另外——确保安装了 URL Rewrite Module(它是单独下载的 = 默认情况下不与 IIS 捆绑)。
  • @LazyOne 你能帮我看看stackoverflow.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)=(\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 来自原始网址。 我没有对此进行测试,但它应该可以工作。

【讨论】:

【解决方案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>

【讨论】:

  • 感谢您提到正在安装的模块,我意识到我没有安装它并设法克服了我的问题:)
猜你喜欢
  • 1970-01-01
  • 2017-08-23
  • 2016-11-03
  • 2014-06-13
  • 2013-04-23
  • 1970-01-01
  • 2017-07-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多