Привет!
Начитался инфы в интернете, как при помощи .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 (или другого "идентификатора ошибки" именно в адресе, когда при этом пользователь находится на главной странице сайта)?
Заранее спасибо!