在htaccess

时间:2017-03-24 03:31:28

标签: .htaccess mod-rewrite url-rewriting

我的网络服务器中有这个文件:

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]

该规则应该是什么样的?

1 个答案:

答案 0 :(得分:3)

从你的问题,

您想重定向

http://example.com/static/js/min/common.min.1234567890.js

http://example.com/static/js/min/common.min.js

那么,怎么做呢

.htaccess

首先添加

 RewriteEngine On 

打开重写引擎

然后下一个重要的一行

RewriteRule ^static/js/min/([^\d]*)(\d{10}).js$ static/js/min/$1js [L]

解释

将路径设置为static/js/min/

然后我们使用RegEx取字符串直到非数字。 ([^\d]*)

捕获common.min.

现在$1common.min.

然后为了匹配网址,我们使用(\d{10})来捕获数字。

捕获1234567890

现在$21234567890我们不再需要了

然后重定向到

static/js/min/$1js

在此我们没有在.之后添加$1,因为$1.common.min.

结尾

所以,代码将是

RewriteEngine On
RewriteRule ^static/js/min/([^\d]*)(\d{10}).js$ static/js/min/$1js [L]

工作截图

我的文件结构

enter image description here

浏览器中的地址

enter image description here