繁体   English   中英

IIS URL 重写和 Web.config

[英]IIS URL Rewrite and Web.config

我对 IIS 一无所知,但我正在尝试解决将所有访问者重定向到example.com/pageexample.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. 我什至不知道该帐户是否可以重写,我正在尝试找出答案。

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>

只是想指出 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 重写模块配置参考

回应评论中的@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来自原始 url。 我没有对此进行测试,但它应该可以工作。

刚刚尝试了这条规则,它适用于 GoDaddy 托管,因为他们已经为每个 IIS 7 帐户安装了 Microsoft URL 重写模块。

<rewrite>
  <rules>
    <rule name="enquiry" stopProcessing="true">
      <match url="^enquiry$" />
      <action type="Rewrite" url="/Enquiry.aspx" />
    </rule>
  </rules>
</rewrite>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM