Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Администрирование Web серверов и Web служб > Исключающее правило в .htaccess


Автор: avenus 17.7.2010, 12:32
Не работает такая директива:

Код

RewriteCond $1 !^(index\.php|public|robots\.txt) 
RewriteRule ^(.*)$ ./index.php/$1 [L]


Проблема в mod_rewrite или в написании?

Автор: skyboy 17.7.2010, 14:29
в глаза бросается "$1" в RewriteCond. RewriteCond проверяется до выполнения любого RewriteRule(потому что как раз выполнение/невыполнение RewriteCond и определяет, какой RewriteRule будет использовано).(сорри, самоуверенно перечил первому же абзацу страницы документации - вполне легитимные обратные ссылки на выражение в RewriteRule заругал) Если ты в RewriteCond проверяешь соответствие/несоответствие запрошенного URI, то проверять http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritecond QUERY_STRING в виде %{QUERY_STRING}
это раз. а во-вторых, у тебя возникнут проблемы, когда тебе понадобится избежать перенаправления на index.php для других файлов в корне. К примеру, поисковики для подтверждения прав на владение сайтов(чтоб добавить сайт в "инструменте вебмастера") требуют разместить определенный файл в корневом каталоге. И для него тоже будешь отдельный RewriteCond писать? может, лучше добавить всего один RewriteCond с семантикой "делать перенаправление только для запросов на несуществующие файлы"?
Код

RewriteCond %{REQUEST_FILENAME} !-f

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)