【问题标题】:Rewrite rule not working on IIS with using Regex使用 Regex 重写规则在 IIS 上不起作用
【发布时间】:2020-01-18 16:12:54
【问题描述】:

我正在尝试在 Windows Server 6.2 上编写重写规则。虽然我使用 IIS 管理器创建代码,但它不起作用。

我尝试了 stopProcess true/false,使用了不同的正则表达式,多次重启服务器。没有改变。我按照微软网站https://docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/creating-rewrite-rules-for-the-url-rewrite-module上的整个步骤进行操作

<system.webServer>
    <rewrite>
      <rules>
        <rule name="Rewrite to e-campus" stopProcessing="true">
          <match url="[^\/]+\/\/([^\/]+:?[0-9]?)\/.*" />
          <action type="Rewrite" url="{R:1}" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>

我只想显示主 URL。我的域名是http://e-campus.example.com。

例如,如果有人访问该链接:http://e-campus.example.com/Login/Student 服务器应重写为: e-campus.example.com(隐藏http://但不重要)

所以基本上我只想显示主 URL。但它一直显示完整的路径。我在这里错过了什么?

【问题讨论】:

    标签: iis url-rewriting


    【解决方案1】:

    根据您的描述,我发现您的正则表达式与整个网址匹配。但是iis url rewrite不会得到整个域,它只会得到url的一部分而不是整个url。

    例如:

    如果你的 url 是 http://e-campus.example.com/Login/Student.,匹配 url 部分是 login/Student.

    所以如果你想重写所有对 e-campus.example.com 的请求,你应该使用下面的 url 重写规则。

    <system.webServer>
        <rewrite>
          <rules>
            <rule name="Rewrite to e-campus" stopProcessing="true">
              <match url="(.*)" />
              <action type="Rewrite" url="http://e-campus.example.com/" />
            </rule>
          </rules>
        </rewrite>
      </system.webServer>
    

    【讨论】:

    • 我检查过,但您的正则表达式也匹配完整的 URL,即 link。无论如何,我完全按照您的建议写了,现在整个网站都出现在 404 故障:当我转到 [link](e-campus.example.com) 或 [link](e-campus.example .com/Login) 等,它给了我 404。谢谢你的回答,还有其他建议吗?
    • 404 表示找不到页面。如果您直接访问e-campus.example.com 而不启用重写规则。它运作良好吗?由于我无法理解您的要求,我只能告诉您您的错误并给您一个非常简单的简单方法。我建议您可以发布有关您对 url 重写规则的要求的更多详细信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    • 2015-07-10
    • 2017-03-08
    • 2013-08-14
    相关资源
    最近更新 更多