IIS中的URL重写导致浏览器中无法加载CSS和图像文件

ssm49v7z  于 2023-06-06  发布在  其他
关注(0)|答案(2)|浏览(292)

我试图解决在IIS中重写经典ASP应用程序的URL后无法在浏览器中加载CSS和图像文件的问题。我已经找到了解决方案,在开发工具的网络选项卡中显示文件已加载(状态代码:200 OK)和css和图像url现在指向正确的文件夹-但文件内容不只是得到加载。以下是基于解决方案(How to fix URL Rewriting for links inside CSS files with IIS7)的web.config:

<rule name="Rewrite css URLs" preCondition="IsCSS" stopProcessing="true">
      <match pattern="localhost/asp-app/data/styles" />
      
      <action type="Rewrite" value="localhost/asp-app/styles" />
  </rule>
  <preConditions>
      <preCondition name="IsCSS">
          <add input="{RESPONSE_CONTENT_TYPE}" pattern="text/css" />
      </preCondition>
  </preConditions>

    </outboundRules>

<rules>
        <rule name="Rewrite-to-http-verbs-handler">
            <match url=".*" />
            <action type="Rewrite" url="/asp-app/routes/router2.asp" />
        </rule>
    </rules>
</rewrite>

而且即使我在head部分的css-link标签中使用了绝对url

<link rel="stylesheet" href="http://localhost/asp-app/styles/test.css">,

CSS不会加载。和同样的是与图像,即使是完整的网址是不工作,即.

<img src="http://localhost/asp-app/images/konsultaatio.jpg" />

有什么办法解决吗?

n1bvdmb6

n1bvdmb61#

在浏览器中直接访问改写后的URL时,文件是否能正常加载?您需要检查CSS文件和图像所在的文件夹是否具有访问权限,以确保IIS用户可以正常读取文件。

6ie5vjzr

6ie5vjzr2#

我终于找到了解决这个问题的办法。它基于以下内容:https://community.progress.com/s/article/Sitefinity-backend-not-working-correctly-when-using-rewrite-rules
因此,解决这个问题所需要的是添加一个规则,以防止css,图像和js文件与asp-file重写同时加载。请注意,

action type=“无”

必须在ASP文件重写规则之前。

<rewrite>
  <rules>
    <rule name="preventRewriteRulesFor" stopProcessing="true">
        <match url="^/?(styles|images|js)/" ignoreCase="true" />
        <action type="None" />
    </rule>
    <rule name="Rewrite" stopProcessing="true">
        <match url=".*" />
        <action type="Rewrite" url="/asp-app/routes/router2.asp" />
    </rule>
  </rules>
</rewrite>

当我在浏览器工具的网络标签中看到css,js甚至图像响应原始数据与asp文件中加载的html内容完全相同时,我意识到了解决方案。因此,必须防止css、js和图像文件与asp-file规则沿着被自动重写。
因此,我也可以跳过原问题中给出的outboundRules和preConditions--它们是不需要的。

相关问题