1

我只是想让一些在 Apache 上运行了很长时间的 ISS 上运行的代码。

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

在 Apache 中我使用过:

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

[大]

要将 URL/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 错误。

我怎样才能使这项工作?

4

1 回答 1

0

你应该在你应该使用的时候使用{R:N}反向引用,因为信息来自. 有关更多信息,请参阅在重写规则中使用反向引用。action{C:N}conditions

如果您打开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>
于 2013-05-01T14:10:17.783 回答