.htaccess将资产重定向到资产文件夹

时间:2013-10-20 23:14:16

标签: php regex apache .htaccess mod-rewrite

我的PHP站点设置了每个站点的文件夹(例如Login),它有一个Index.php文件和site-specfic资产。但是,每个页面都需要的一些资产存储在最高级别的“资产”文件夹中(这有意义吗?)。

我玩过.htaccess并得到了这段代码

RewriteEngine on
RewriteBase /
RewriteRule ^(.*)$ http://janberktold.com/Assets/$1 [R=301,L]

但是,我的问题是:它重定向

  

本地主机/登录/ test.css

  

本地主机/资产/登录/ test.css

而不是

  

本地主机/资产/ test.css

如何让我的服务器重定向到正确的路径?

2 个答案:

答案 0 :(得分:3)

试试这个

RewriteEngine on
RewriteBase /

# Rewrite if the file does not exists
RewriteCond %{REQUEST_FILENAME} !-f

# Rewrite only if the URI does not starts with Assets
RewriteCond %{REQUEST_URI} !^/Assets

# Rewrite any assets file
RewriteRule ([^/]*).(css|js|png|jpe?g)$ Assets/$1.$2 [L]

这应该将所有资产文件localhost/dir/file.csslocalhost/dir/dir2/file.css重写为localhost/Assets/file.css

答案 1 :(得分:1)

将规则替换为:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(?:[^/]*/)*([^/.]+\.(?:jpe?g|gif|bmp|png|tiff|css|js))$ /Assets/$1 [R=301,L,NC]