【问题标题】:IIS URL rewrite trouble with CSS url() valuesIIS URL 用 CSS url() 值重写问题
【发布时间】:2014-10-23 22:29:35
【问题描述】:

大约一周前,我问了一个关于在 VPS 上运行 2 个不同的应用程序/Web 服务器的问题,但使用一个主要的传入 URL/端口(仅使用 site.com 而不需要 site.com:8080)。

我收到了一个答案,并且大部分情况下解决了这个问题。我需要使用 URL 重写,并在此过程中为重写制定入站和出站规则。

当我有一个值 URL 是相对的 CSS 属性时,这非常有效。例如:

.rule{
    background-image: url(/images/picture.jpg);
}

我目前的入站和出站规则如下

<rewrite>
        <rules>
            <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                <match url="java/(.*)" />
                <action type="Rewrite" url="http://s17857763.onlinehome-server.com:8080/{R:1}" />
            </rule>
        </rules>
        <outboundRules>
            <rule name="RewriteRelative" preCondition="IsHtml" enabled="false" stopProcessing="true">
                <match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="/(.*)" />
                <action type="Rewrite" value="/java/{R:1}" />
            </rule>
            <rule name="RewriteAbsolute" preCondition="IsHtml" enabled="false">
                <match filterByTags="A, Area, Base, Form, Head, IFrame, Img, Input, Link, Script" pattern="http(s)?://s17857763\.com/(.*)" />
                <action type="Rewrite" value="/java/{R:2}" />
            </rule>
            <preConditions>
                <preCondition name="IsHtml">
                    <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
                    <add input="{URL}" pattern=".*/java/.*" />
                </preCondition>
            </preConditions>
        </outboundRules>
    </rewrite>

如果您想查看我遇到的问题,请打开您的开发控制台,转至http://s17857763.onlinehome-server.com/java/FirstMaven/

由于出站规则,它可以正常加载正常的 CSS 和 JS 链接,因为它们来自 HTML 标记....但我不知道是否可以修复 CSS url() 路径。

【问题讨论】:

  • 您的问题的 URL 无效。
  • 对那个 Chrissi 感到抱歉,它现在应该可以工作了。我忘记了数字前的“s”

标签: javascript css mod-rewrite iis url-rewriting


【解决方案1】:

好的,我已经完成了 CSS 重写并开始工作了。在先决条件中,我添加了以下内容:

<preCondition name="IsCSS">
    <add input="{RESPONSE_CONTENT_TYPE}" pattern="^/text/css" />
</preCondition>

然后,在我的 outBoundRules 部分,我添加了以下内容:

<rule name="RewriteCSSRelativePaths" preCondition="IsCSS">
    <match filterByTags="None" pattern="url\(&apos;" />
    <action type="Rewrite"  value="url(&apos;/<path>/" />
</rule>

我的模式只是在寻找 url(' 。如果您想要更多的控制权,请调整模式以相应地寻找。注意 ( 在我的模式中。我不得不转义 ( 因为() 中的正则表达式捕获数据,我不想这样做。就我而言,我只是想调整路径以通过我们的软件代理。

【讨论】:

    【解决方案2】:

    您的部分问题将是前置条件规则。您将其限制为仅是 HTML。对于 CSS,您可以为“^text/css”添加前置条件,为“^application/javascript”添加另一个前置条件,或者完全删除前置条件。我倾向于做第一个选择。它允许更细粒度的控制。我现在正在做同样的事情,这就是我找到这个页面的方式。如果我弄明白了,我会在这里发布我所做的。

    【讨论】:

      【解决方案3】:

      你可能忘记了引号

      试试这个

      .rule{
          background-image: url("/images/picture.jpg");
      }
      

      【讨论】:

        猜你喜欢
        • 2012-06-18
        • 1970-01-01
        • 2016-11-03
        • 2019-10-26
        • 2016-06-06
        • 2011-10-21
        • 2017-12-14
        • 1970-01-01
        • 2021-11-14
        相关资源
        最近更新 更多