htaccess重定向所有资产URL,除了以特定字符串开头

时间:2017-07-30 00:47:20

标签: regex apache .htaccess mod-rewrite

让我们说项目结构是这样的:

/
/public/assets/css/<css files go here>
/public/assets/js/<js files go here>
/public/assets/img/<image files go here>
/storage/assets/css/<css files go here>
/storage/assets/js/<js files go here>
/storage/assets/img/<image files go here>
/resources/assets/css/<css files go here>
/resources/assets/js/<js files go here>
/resources/assets/img/<image files go here>

我想将所有css和js资产请求重定向到/public/,但以resourcesstorage

开头的请求除外

例如此请求:/assets/css/style.css必须重定向到:/public/assets/css/style.cc

但是,/storage/assets/css/style.cc必须保持不变。

我正在尝试的是这样的事情:

RewriteRule ^![storage|resources](.*\.css)$ /public/$1  [L,R=302]
RewriteRule ^![storage|resources](.*\.js)$ /public/$1  [L,R=302]

我知道我在正则表达式中遗漏了一些东西。

有谁知道如何纠正它?

提前谢谢

1 个答案:

答案 0 :(得分:1)

您走在正确的轨道上,非常接近解决方案,但您必须在RewriteCond内应用您的条件:

RewriteCond %{REQUEST_URI} !^/?(storage|resources|public)
RewriteRule .*\.(css|js)$ /public/$0  [L,R=302]

否则你可以选择使用负前瞻的单行RewriteRule来应用重定向规则:

RewriteRule ^(?!storage|resources|public).*\.(css|js)$ /public/$0  [L,R=302]