Что не так с моими правилами для mod_rewrite?

На хостинге почему-то неправильно работают эти правила

RewriteEngine On
RewriteBase /

# Exclude /assets and /manager directories and images from rewrite rules
RewriteRule ^(manager|assets)/*$ - [L]
RewriteRule \.(js|ico|gif|jpg|png|css|xml|phps|mp3|ogg|avi|mpg|acc|swf|jpeg)$ - [L]

# For Friendly URLs
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/assets/cacheimg
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]



Почему-то при запросе на несуществующий файл в папке /assets/cacheimg, запускается index.php?q=…

Хотя должна выдаваться стандартная страница 404 сервера.


Проверял у себя и еще на одном хостинге — все ОК.

Apache v2.2 на всех серверах.


Подскажите пожалуйста, где может быть ошибка?
  • Вопрос задан
  • 2966 просмотров
Пригласить эксперта
Ответы на вопрос 4
karenishe
@karenishe
Видимо, .htaccess находится не в document_root? Пропишите полный путь в строке сRewriteCond %{REQUEST_URI} !^/assets/cacheimg
Ответ написан
BuriK666
@BuriK666
Компьютерный псих
добавьте в /assets/cacheimg/.htaccess
RewriteEngine Off

такое может быть если используется VirtualDocumentRoot или есть еще правила mod_rewrite
Ответ написан
charliez
@charliez
а в техподдержку хостера если обратиться?
Ответ написан
AHTOH
@AHTOH
Не работает, потому что RewriteCond работает только со следующим за ним правилом, для объединениz нескольких RewriteCond нужно в конце строки поставить [OR]. И указать, что делать по этой директиве.

Полагаю, вот так все заработает:
# For Friendly URLs
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_FILENAME} !-d [OR]
RewriteCond %{REQUEST_URI} !^/assets/cacheimg
RewriteRule .* — [R=404]
RewriteRule ^(.*)$ /index.php?q=$1 [L,QSA]
Ответ написан
Ваш ответ на вопрос

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

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