【问题标题】:Mod_Rewrite variable dynamic directory inside of two static onesMod_Rewrite 两个静态目录中的变量动态目录
【发布时间】: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.jsmyjs_v2.js 等)?这通常是一种更具可扩展性的策略,尤其是当您想要开始做一些事情时,比如将静态资产存储在 CDN 上。这还允许您在该内容上设置非常长的过期标头,以帮助浏览器端缓存。它还使回滚变得非常容易(您只需更改 HTML 以引用旧文件,浏览器就会做正确的事情)。
  • 因为如我在上面链接的答案中所述,某些浏览器和代理将无法读取?变量并导致用户仍然拥有过时的文件。这种方式保证了它会拉取新文件,因为它在链接结构中。
  • 我什么都没说,只是改变了实际的文件名。

标签: javascript php apache .htaccess mod-rewrite


【解决方案1】:

您可以将此单一规则用于此重定向:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^/?((?:css|js))/v\d+/(.+)$ /$1/$2 [L,NC,R]
</IfModule>

【讨论】:

  • 这似乎什么也没做。我还需要做什么吗?
  • 这在我的 Apache 上工作并将 www.localhost/js/v1/min/pages/myjs.js 重定向到 www.localhost/js/min/pages/myjs.js 从而从 URL 中删除 /v1。你还有其他规则吗?尝试注释掉&lt;IfModule 并重新测试
  • 这很棒!我的代码中有一个类型,我没有在我的版本前面添加 v 。 !
  • 很高兴它成功了。奇怪的是,有人在没有任何评论的情况下对我的工作答案投了反对票。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
相关资源
最近更新 更多