Задать вопрос

Как оптимизировать редиректы в htaccess?

Привет!
Начитался инфы в интернете, как при помощи .htaccess сделать ЧПУ, и захотелось сделать шаблончик для своих нужд.
В итоге скомпилировал следующий вариант:
<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /
#1. Убрать www
    RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 

#2. Убрать / в конце адреса
    RewriteCond %{HTTP_HOST} (.*)
    RewriteCond %{REQUEST_URI} /$ [NC]
    RewriteRule ^(.*)(/)$ $1 [L,R=301]

#3. Убрать /index.html или /index.php
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(html|php)\ HTTP/
    RewriteRule ^index\.(html|php)$ http://my.site[R=301,L]

#4. Убрать .html или .php
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^.]+)\.(html|php)\ HTTP
    RewriteRule ^([^.]+)\.(html|php)$ http://my.site/$1 [R=301,L]
    RewriteCond %{REQUEST_URI} !(\.[^./]+)$
    RewriteCond %{REQUEST_fileNAME} !-d
    RewriteCond %{REQUEST_fileNAME} !-f
    RewriteRule (.*) /$1.html [L]
</IfModule>


Работает почти всё так, как я хочу, но мучает вопрос именно оптимизации. Получается, что каждый раз, чтобы получился ЧПУ, ссылка проходит несколько итераций, которые хотелось бы свести к минимуму (желательно, к одному преобразованию :) ).
Можно ли как-то изменить код выше, чтобы все условия выполнялись, но правил было по минимуму?

И ещё: редирект http://my.site/index.html -> http://my.site работает отлично, но если ввести в браузере ссылку http://my.site/index (без .html), то хвост в виде index остаётся. Можно сделать стандартно: Redirect 301 /index http://my.site, но тогда получается ещё больше шагов преобразования, чего не хотелось бы. Подскажите, как побороть хвост в этом случае?

В итоге вопрос: как мне переделать код выше, чтобы наиболее аккуратно убрать из всех ссылок www, "/", index, .html и php.? И везде ли можно в RewriteRule заменить http://my.site на http://%1, чтобы стандартизировать для использования на всех своих сайтах сразу?

К сожалению, пробовал уже много вариантов, но моих знаний не хватает, чтобы сделать всё идеально.
Или просто скажите мне, что дальше править .htaccess некуда и я придумываю велосипед с квадратными колёсами. :)

P.S.: А как изменить ErrorDocument 404 http://my.site/#error404, чтобы убрать адрес (my.site) из .htaccess, но редирект был на главную страницу сайта с добавлением /#error404 (или другого "идентификатора ошибки" именно в адресе, когда при этом пользователь находится на главной странице сайта)?

Заранее спасибо!
  • Вопрос задан
  • 386 просмотров
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
@ShamblerR
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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