Переписать URL-адреса для статического контента

У меня проблемы с перезаписью URL-адресов статических файлов в текущей настройке .htaccess на apache2.

Моя структура приложения:

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

Итак, мне нужно переписать URL-адрес, например /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]

person Dan Sosedoff    schedule 19.10.2009    source источник


Ответы (2)


Проверьте, является ли редирект разумным:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/public/$0 -f
RewriteRule ^.+\.(jpg|jpeg|gif|png|ico|css|js|swf)$ /public/$0 [L]
person Gumbo    schedule 19.10.2009
comment
@Dan Sosedoff: Также обратите внимание, что сказал Кев. Поскольку мое решение требует двух тестов файловой системы, прежде чем действительно произойдет перенаправление, это не самое экономичное решение. - person Gumbo; 20.10.2009

Если количество префиксов ограничено, вы можете добавить еще одну группу в свое регулярное выражение:

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