htaccess重写规则/条件使文件未找到

时间:2013-09-10 20:04:27

标签: .htaccess mod-rewrite

这就是我想要的......

RewriteEngine On
RewriteCond $1 ^(.*)/__ver([0-9]+)__/(.*)$
RewriteRule ^(.*)$ /$1 [L]

我最终要做的是版本化我的文件结构而不实际更改物理目录结构。我也试图设置一些有助于防止某些浏览器缓存的东西。无论哪种方式,我都试图通过codeigniter从URL中删除index.php,但失败了。

我希望能够在我的html中提供src=""中的uri

http://example.com/__ver333__/js/script.js
http://example.com/__ver333__/script.js
http://example.com/__ver333__/js/dir/script.js

or 

__ver333__/js/script.js
__ver333__/script.js
__ver333__/js/dir/script.js 

但就服务器行为或担心而言,我希望它删除 ver333 并相应地提取文件。所以它等同于http://example.com/js/script.js/js/script.js

1 个答案:

答案 0 :(得分:0)

RewriteCond $1 ^(.*)/__ver([0-9]+)__/(.*)$没有任何意义。 $1是该行第一个参数中正则表达式中的第一个捕获组。由于这是第一个参数,因此您当前正在将文件路径与字符$1进行匹配。这显然永远不会匹配。

您可以使用常规重写轻松完成所需的操作:

RewriteRule ^(.*)/__ver[0-9]+__/(.*)$ /$1/$2

确保您启用RewriteEngine并设置RewriteBase /