【问题标题】:Add URL rewrite rule on root website for specific URL在根网站上为特定 URL 添加 URL 重写规则
【发布时间】:2018-04-13 15:48:25
【问题描述】:

是否可以根据我的网站名称后的匹配 URL 应用 URL 重写?所以假设我在http://foo:8080 上有一条规则,它使我能够转到http://foo:8080/ 并且将重写为http://too。有没有办法说如果我访问http://foo:8080/bar,它将带我到http://too/bar,但网站foo 上有规则,下面没有任何应用程序?

这将使一个站点上的多个规则能够根据我最初导航到的位置重新路由,而不是为每个重写规则设置多个应用程序。

我希望这是有道理的,如果没有,但您认为您有答案,请告诉我,我会尽量说得更清楚。

谢谢

【问题讨论】:

  • “foo”和“too”在哪里/如何托管?你能澄清“它下面没有任何应用程序”吗?您能否将两个主机名绑定到同一个 IIS 站点,并使用重写来提供适当的内容?
  • “Foo”与“too”托管在不同的服务器上。此时的重写是反向代理重写,因此转到“Foo”将重写为“too”,然后将域之后的任何内容附加到新的 url。根目录下没有应用程序,我的意思是 iis 中没有虚拟文件夹。只是顶级网站。在根网站上设置规则会为“'/'之后的任何内容”创建规则,这意味着直接在网站名称之后将被重写。创建一个应用程序然后在其中添加规则会将重写添加到“/app/”之后的任何内容。我想在没有应用的情况下模仿它。
  • 您能否在问题中包含 web.config 的重写部分?如果您对裸域进行了重写,您可以在输入中使用捕获组,然后将该值插入到生成的重写 URL 中? (如果您需要将该行为限制为特定 URL 而不是所有 url,则使用条件)

标签: iis url-rewriting


【解决方案1】:

我认为您需要使用具有以下条件的规则。 URL Rewrite 的文档列出了适用于您的条件的变量:https://docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/url-rewrite-module-configuration-reference

...
<rewrite>
    <rules>
        <rule name="Foo Bar Too testing" stopProcessing="true">
            <match url="(.*)" />
            <action type="Rewrite" url="http://too/{C:1}" />
            <conditions>
                <add input="{PATH_INFO}" pattern="/app/(.*)" />
            </conditions>
        </rule>
    </rules>
</rewrite>
...

上述规则(在 foo 上)仅适用于以 /app/ 开头的路径,并且重写后的 URL 的路径将不包含 /app 前缀。您可以修改此操作以使用 {C:0}(完整路径),这将在重写的 URL 中包含 /app 前缀。

【讨论】:

  • 我认为您的解决方案也可能有效,但就我而言,这不是正确的答案。不过,感谢您的所有帮助,它使我朝着正确的方向前进!根据我添加的答案,解决方案位于配置的匹配 url 部分。
【解决方案2】:

感谢@MisterSmith 为我指明了正确的方向,我发现答案如下,这也允许使用http 或https。我的配置现在如下所示:

 <rewrite>
        <rules>
            <rule name="Rule" stopProcessing="true">
                <match url="^bar/(.*)" />
                <action type="Rewrite" url="{C:1}://too:8080/bar/{R:1}" />
                <conditions>
                    <add input="{CACHE_URL}" pattern="^(https?)://" />
                </conditions>
            </rule>
        </rules>
    </rewrite>

规则是在“foo”网站上设置的,现在当我转到http://foo/bar/blahblahblah 时,我收到了来自http://too:8080/bar/blahblahblah 的回复

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-08
    • 2013-06-08
    • 1970-01-01
    • 2017-06-02
    • 2017-06-20
    • 1970-01-01
    • 1970-01-01
    • 2016-10-17
    相关资源
    最近更新 更多