我的网络服务器中有这个文件:
http://example.com/static/js/min/common.min.js
由于/static/
内的所有文件都使用CloudFlare的边缘缓存进行缓存,我需要一种方法来更改这样的URL,因此如果文件被修改,新版本将自动新鲜服务:
http://example.com/static/js/min/common.min.1234567890.js
其中1234567890是文件修改日期的时间戳。我已根据修改日期生成文件名,我遇到的问题是在.htaccess文件中。
这很好用:
RewriteRule ^(.*)\.[\d]{10}\.(js)$ $1.$2 [L]
这意味着:
http://example.com/static/js/min/common.min.1234567890.js
重定向到:
http://example.com/static/js/min/common.min.js
但是,这将捕获来自域的所有.js请求,我只想从/static/js/min/*.js中捕获.js请求 - 但这是失败的:
RewriteRule ^static/js/min/(.*)\.[\d]{10}\.(js)$ $1.$2 [L]
该规则应该是什么样的?
答案 0 :(得分:3)
从你的问题,
您想重定向
http://example.com/static/js/min/common.min.1234567890.js
到
http://example.com/static/js/min/common.min.js
首先添加
RewriteEngine On
打开重写引擎
RewriteRule ^static/js/min/([^\d]*)(\d{10}).js$ static/js/min/$1js [L]
将路径设置为static/js/min/
然后我们使用RegEx取字符串直到非数字。 ([^\d]*)
。
捕获common.min.
。
现在$1
为common.min.
然后为了匹配网址,我们使用(\d{10})
来捕获数字。
捕获1234567890
。
现在$2
已1234567890
我们不再需要了
然后重定向到
static/js/min/$1js
在此我们没有在.
之后添加$1
,因为$1
以.
(common.min.
)
所以,代码将是
RewriteEngine On
RewriteRule ^static/js/min/([^\d]*)(\d{10}).js$ static/js/min/$1js [L]
我的文件结构
浏览器中的地址