我在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]
答案 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]