2012-01-23 5 views
1

У меня есть моя настройка .htaccess, как показано ниже. Это простая концепция, когда все запросы передаются в cgi-bin/controller.rb, за исключением тех запросов на что-либо в/images,/css,/javascripts или/cgi-binHtaccess RedirectMatch надлежащего использования

Я также хочу, чтобы корень просто перенаправляться на/index/show, но это часть, которая является ошибкой. Он просто бесконечно перенаправляет на/index/showindex/showindex/show ...

Может ли кто-нибудь объяснить, почему моя перенаправление не работает?

RedirectMatch permanent ^/$ /index/show 

ErrorDocument 404 /404 

RewriteEngine on 
RewriteCond %{REQUEST_URI} !^/images/ [NC] 
RewriteCond %{REQUEST_URI} !^/css/ [NC] 
RewriteCond %{REQUEST_URI} !^/javascripts/ [NC] 
RewriteCond %{REQUEST_URI} !^/cgi-bin/ [NC] 
RewriteRule (.*) /cgi-bin/controller.rb?%{QUERY_STRING}&page=$1 [L] 

ответ

3

Избегайте использования RedirectMatch и RewriteRule одновременно. Это разные модули и применяются в разное время в потоке запросов. Вы можете достичь того же, используя только RewriteRule-х:

RewriteEngine on 

RewriteCond %{REQUEST_URI} !^/index/show [NC] 
RewriteRule ^$ /index/show [L] 

RewriteCond %{REQUEST_URI} !^/index/show [NC] 
RewriteCond %{REQUEST_URI} !^/images/ [NC] 
RewriteCond %{REQUEST_URI} !^/css/ [NC] 
RewriteCond %{REQUEST_URI} !^/javascripts/ [NC] 
RewriteCond %{REQUEST_URI} !^/cgi-bin/ [NC] 
RewriteRule (.*) /cgi-bin/controller.rb?page=$1 [L,QSA] 

Необязательно использовать RewriteRule ^$ /index/show [L,R=301], если вы действительно хотите перенаправлять, вместо того, чтобы оставить в адресной строке красивым и чистым.

Также не забудьте очистить кеш браузеров, так как постоянное перенаправление кэшируется очень агрессивно.

+0

Работал отлично. Ваш ответ помог мне понять немного больше о том, как работают файлы htaccess. Благодарю. – weexpectedTHIS

+0

Зачем избегать использования RedirectMatch и RewriteRule в одно и то же время? То, что они являются разными модулями и применяются в разное время в потоке запросов, не является причиной. –

+0

@ user2407309 Избежать трудно объяснить неустойчивое поведение, которое может быть разным на разных серверах, кажется хорошей практикой. – Gerben

Смежные вопросы