Вопрос специалистам по Apache и mod_rewrite?

Dear %habrauser%,


Я совсем не программист и не администратор, но нужно решить одну задачку, которую обычно решают специально обученные люди. RTFM делал, но не осилил. Видимо, man'ы и regexp'ы — это и близко не мое.


Есть Apahce, его public_html содержит в себе такой вот .htaccess:

RewriteEngine On<br/>
RewriteCond %{REQUEST_FILENAME} -d<br/>
RewriteCond %{REQUEST_URI} (.*)<br/>
RewriteRule (.+)[^/] %1/ [R=301,L]<br/>
RewriteRule \.(css|js|ico|gif|jpg|jpeg|png|swf|mp3|txt)$ - [NC,L]<br/>
RewriteRule ^index\.php$ - [L]<br/>
RewriteRule .* index.php?go=$0 [QSA,L]



То есть, mod_rewrite перезаписывает обращения к любым URI сервера, что предусмотрено движком сайта (дальше в дело вступает динамика и делает свое дело). Но есть на этом сервере одна папка со статичным контентом, обращения к которой не нужно обрабатывать mod_rewrite. То есть, необходимо освободить субдиректорию, например, public_html/static/, от тотального гнёта mod_rewrite.


Помогите, пожалуйста с модификацией приведенного фрагмента .htaccess.


Заранее спасибо.
  • Вопрос задан
  • 4905 просмотров
Пригласить эксперта
Ответы на вопрос 8
leonid239
@leonid239
Просто положите в эту папку файл .htaccess и в нем напишите одну строку:

RewriteEngine Off
Ответ написан
taliban
@taliban
php программист
Мне кажется стоит добавить правило:
RewriteRule !^/static/* — [L]
Или нечто в таком духе =) В голове крутится, вспомнить не могу
Ответ написан
@Yashin
Я так понимаю, это нужно для того, чтобы отдавать статику (существующие на диске файлы) без участия скриптов? Тогда есть замечательные параметры:
#применять RewriteRule, только если запрашиваемое имя файла не совпадает с именем какого-нибудь реального файла на сервере
RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d
Ответ написан
@inkvizitor68sl
Linux-сисадмин с 8 летним стажем.
Я бы на вашем месте прикрутил nginx и спокойненько без затрат ресурсов раздавал эту статику nginx'ом напрямую.
Ответ написан
WebSpider
@WebSpider
Как насчёт такого варианта?

RewriteCond %{REQUEST_FILENAME} -f

RewriteRule .* - [S=10]


S=10 означает пропустить 10 следующих правил
Ответ написан
WebSpider
@WebSpider
А вот так?

RewriteCond %{REQUEST_FILENAME} ^static/.*
RewriteRule .* [S=10]


Смысл в том, чтобы при совпадении пути пропускать условия реврайтов.
(Вместо 10 подставить необходимое число, можно поставить заведомо большее, с запасом)
Ответ написан
@max_rip
попробуйте заменить
RewriteRule \.(css|js|ico|gif|jpg|jpeg|png|swf|mp3|txt)$ — [NC,L]
на
RewriteRule ((static\\asdas.php)|(.(css|js|ico|gif|jpg|jpeg|png|swf|mp3|txt)))$ — [NC,L]
Ответ написан
@videns
Думаю, что так будет работать:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_URI} (.*)
RewriteCond %{REQUEST_URI} !^/your/dir.*$
RewriteRule (.+)[^/] %1/ [R=301,L]
RewriteRule \.(css|js|ico|gif|jpg|jpeg|png|swf|mp3|txt)$ - [NC,L]
RewriteRule ^index\.php$ - [L]
RewriteRule .* index.php?go=$0 [QSA,L]


Если не сработает, убрать строчку RewriteCond %{REQUEST_URI} (.*)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы