【问题标题】:Rewrite rules in ISS's web.config重写 ISS 的 web.config 中的规则
【发布时间】:2013-05-01 22:20:37
【问题描述】:

我只是想让一些代码在 ISS 上运行,而这些代码已经在 Apache 上运行了很长时间。

一个特定的 mod_rewrite 规则被证明很难发挥作用。

在我使用过的 Apache 中:

RewriteRule ^media/(js|css|img|font)/(.+)\.(\d+)\.(js|css|png|jpg|gif)$ /media/$1/$2.$4 

[L]

/media/css/style.1367406756.css 之类的网址转换为/media/css/style.css,让我在文件中添加时间戳以避免缓存问题。

在我添加的 web.config 文件中:

<rule name="Cache bust assets" stopProcessing="true">
    <match url="^(.*)$"/>
    <conditions>
    <add input="{URL}" pattern="^media/(js|css|img|font)/(.+)\.(\d+)\.(js|css|png|jpg|gif)$"/>
    </conditions>
    <action type="Rewrite" url="/media/{R:1}/{R:2}.{R:4}" appendQueryString="true" />
</rule>

哪个,看起来应该可以了。 (它与另一个规则并列,它工作正常,所以并​​不是服务器没有解析它或任何东西)。

我没有收到任何错误,除了访问 /media/css/style.1367406756.css 给我一个 404 错误。

我怎样才能做到这一点?

【问题讨论】:

    标签: iis url-rewriting web-config


    【解决方案1】:

    当您应该使用{C:N} 时,您在action 中使用{R:N} 反向引用,因为信息来自conditions。请参阅Using Back-references in Rewrite Rules 了解更多信息。

    如果您打开iismanager 控制台,您会看到此错误:

    要让您的规则发挥作用,您有 2 个解决方案。

    首先您可以将您的操作更改为(使用{C:N}):

    <action type="Rewrite" url="/media/{C:1}/{C:2}.{C:4}" appendQueryString="true" />
    

    或者(我确实认为这是一个更好的解决方案),您可以使用Import mod_rewrite Rules 工具。

    iismanager 控制台中,单击Import Rules...(在右侧选项卡上)并粘贴您的apache 规则:

    这将为您创建以下规则:

    <rule name="Imported Rule 1" stopProcessing="true">
        <match url="^media/(js|css|img|font)/(.+)\.(\d+)\.(js|css|png|jpg|gif)$" ignoreCase="false" />
        <action type="Rewrite" url="/media/{R:1}/{R:2}.{R:4}" />
    </rule>
    

    【讨论】:

    • 啊,我以前从未使用过 Windows 服务器,也不知道 GUI 的东西——我通常如何远程访问它?通过 RDP?
    • 是的,通过 RDP,然后您运行 inetmgr 并获得控制台。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    相关资源
    最近更新 更多