IIS URL重写CSS url()值的问题

时间:2014-08-29 21:06:12

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

大约一周前,我问了一个关于在VPS上运行2个不同app / 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()路径。

3 个答案:

答案 0 :(得分:0)

可能你忘记了引号

试试这个

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

答案 1 :(得分:0)

您的部分问题将成为preCondition规则。您将其限制为仅限HTML。对于CSS,您要么为&#34; ^ text / css&#34;添加先决条件。另一个用于&#34; ^ application / javascript&#34;或完全取消前提条件。我倾向于做第一个选择。它允许更细粒度的控制。我现在正在做同样的事情,这就是我找到这个页面的方式。如果我弄清楚了,我会发布我在这里所做的事情。

答案 2 :(得分:0)

好的,所以我完成了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('。如果你想要更多的控制权,请调整模式以便相应地查找。注意(在我的模式中。我不得不逃避(因为()在正则表达式捕获数据中,我不想这样做。在我的情况下,我只想调整路径以通过我们的软件代理。