重写静态内容的URL

时间:2009-10-19 17:48:02

标签: mod-rewrite apache2

我在apache2上的当前.htaccess设置中有静态文件url重写问题。

我的应用结构是:

/siteroot
/siteroot/app
/siteroot/lib
/siteroot/...
/siteroot/public <- all the static files (images, js, etc.) stored here
/siteroot/index.php
/siteroot/.htaccess

所以,我需要将/css/style.css等网址重写为/public/css/style.css。我以非常简单的方式做到了这一点,但是当找不到文件时会导致10次内部重定向,这很糟糕。如果找不到文件,我需要以某种方式返回404代码,或者只是将其传递给下一个规则。而且我没有任何访问站点配置文件的权限。只有.htaccess。

我问这个问题的原因是该网站是在nginx上运行的,我需要在apache上重建相同的配置。

这是我的.htaccess文件。

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.+\.(jpg|jpeg|gif|png|ico|css|js|swf)$ /public/$0 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

2 个答案:

答案 0 :(得分:3)

测试重定向是否合理:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/public/$0 -f
RewriteRule ^.+\.(jpg|jpeg|gif|png|ico|css|js|swf)$ /public/$0 [L]

答案 1 :(得分:0)

如果前缀数量有限,您可以在正则表达式中添加另一个组:

RewriteRule ^(css|js|images|etc)/.+\.(jpg|jpeg|gif|png|ico|css|js|swf)$ /public/$0 [L]