【发布时间】:2015-05-13 02:33:26
【问题描述】:
因此,每当我们作为开发人员更新文件时,我都会尝试强制重新加载 javascript 文件。为了做到这一点,我们正在使用https://stackoverflow.com/a/7671705/805779 此处找到的答案,我们认为这会很好用,但是我不确定如何重写 mod。所以这是我的链接
www.mysite.com/js/v1/myjs.js
我要改成
www.nysite.com/js/myjs.js
这是我目前所拥有的,但它不起作用
<IfModule mod_rewrite>
RewriteEngine On
RewriteBase /
RewriteRule ^/js/(.*)$/(.*)$ js/$2 [L,NC,R]
</IfModule>
经过更多测试后,我发现我的主要问题是没有将 .c 添加到我的 IfModule 中,考虑到这一点,以下是“部分”工作
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^/css/(.*)/(.*)$ /css/$2 [L,NC,R]
RewriteRule ^/js/(.*)/(.*)$ /js/$2 [L,NC,R]
</IfModule>
这适用于我的经典示例
www.mysite.com/js/v1/myjs.js => www.nysite.com/js/myjs.js
但是,如果涉及多个变量,这将不起作用。又名
www.mysite.com/js/v1/min/pages/myjs.js
我的版本号 v1 将始终直接位于根文件夹之后,因此是 js/v1 或 css/v1,我想删除 v1 并保留其后的所有内容
【问题讨论】:
-
为什么不只对文件进行版本控制(即
myjs_v1.js、myjs_v2.js等)?这通常是一种更具可扩展性的策略,尤其是当您想要开始做一些事情时,比如将静态资产存储在 CDN 上。这还允许您在该内容上设置非常长的过期标头,以帮助浏览器端缓存。它还使回滚变得非常容易(您只需更改 HTML 以引用旧文件,浏览器就会做正确的事情)。 -
因为如我在上面链接的答案中所述,某些浏览器和代理将无法读取?变量并导致用户仍然拥有过时的文件。这种方式保证了它会拉取新文件,因为它在链接结构中。
-
我什么都没说,只是改变了实际的文件名。
标签: javascript php apache .htaccess mod-rewrite