我只是想在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错误。
我该如何使这项工作?
答案 0 :(得分:0)
由于信息来自{R:N}
,因此当您使用action
时,{C: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>