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

Можно ли улучшить кастом для конфига .htaccess?

Добрый день коллеги, сразу прошу не коментировать тех кто не понимает про что идет разовор.
Написал стандартный кастом для сайтов, посколку надоело каждый раз делать одну и ту же работу на всех проектах.
Задача:
Собрать стандартные редиректы для SEO отптимизации сайтов (склейка зеркал и т.д.)
Оптимизировать код:
Добавить как можно больше стандартных кейсов.
НЕ ВХОДЯТ:
редиректы с урла на урл поскольку это дело каждого сайта, только общие!

Вчера набросал файлик, кастома для .htaccess, разрабатаывал дял Bitrix но подойдет для большенства движков.
Последняя версия файла: klondike-studio.ru/useful_materials/standartnyy-ht...

############################################################################
####  Cтандартный .htaccess для проектов студии Клондайк, версия 2.0    ####
############################################################################
RewriteEngine On
# Директива включает редиректы.
RewriteBase / 
# Без директивы (.*) = /$1 будет /var/wwww/site/web/$1  с директивой  = /$1
Options +FollowSymLinks
# Разрешает переход по символическим ссылкам.

############################################################################
#### Перенаправляем протокол https на http                              ####
############################################################################
RewriteCond %{HTTPS} on
# Проверяем наличие https в URL
RewriteRule ^.*$ http://%{SERVER_NAME}%{REQUEST_URI}
# Перенаправляем протокол на http

############################################################################
#### Выбор основного зеркала (или с www или без www)                    ####
############################################################################
# 1. Редирект с www на без www. (раскоментировать директивы пункта 1.1)
#RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
# Проверяет, содержит ли домен www (в начале URL).
#RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
# Перенаправляет URL на домен без www.
####
# 2. Редирект без www на www. (раскоментировать директивы пункта 1.2)
#RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
# Проверяет, не содержит ли домен www (в начале URL).
#RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
# Перенаправляет URL на домен c www.

############################################################################
#### Убираем повторяющиеся слеши (/) в URL                              ####
############################################################################
RewriteCond %{REQUEST_URI} ^(.*)/{2,}(.*)$
# Проверяем, повторяется ли слеш (//) более двух раз.
RewriteRule . %1/%2 [R=301,L]
# Исключаем все лишние слеши.

############################################################################
#### Убираем слеши в конце URL для статических файлов (содержит точку)  ####
############################################################################
RewriteCond %{REQUEST_URI} \..+$  
# Если файл содержит точку.
RewriteCond %{REQUEST_FILENAME} !-d   
# Это не директория.
RewriteCond %{REQUEST_URI} ^(.+)/$      
# И в конце URL есть слеш.
RewriteRule ^(.+)/$ /$1 [R=301,L]     
# Исключить слеш.

############################################################################
#### Добавляем слеш(/), если его нет, и это не файл.                    ####
############################################################################
RewriteCond %{REQUEST_URI} !(.*)/$
#Если слеша в конце нет.
RewriteCond %{REQUEST_URI} !\..+$
#В URL нет точки (файл).
RewriteRule ^(.*)$ $1/ [L,R=301]
#Добавляем слеш в конце.

############################################################################
####  Убираем index.php, если он есть в конце URL                       ####
############################################################################
RewriteCond %{REQUEST_METHOD} =GET
# Выявляем GET запрос в URL (не POST)
RewriteCond %{REQUEST_URI} ^(.*)/index\.php$
# URL cодержит index.php в конце.
RewriteRule ^(.*)$ %1/ [R=301,L]
# Удалить index.php из URL.

############################################################################
#### Конец общее части, далее следует собственные директивы .htaccess   ####
############################################################################

Далее следует остальная часть .htaccess

У кого будут сображения на этот счет, может как-то улучшить, или добавить недостающих правил,
Есил найдется что добавить пишите что и почему.
  • Вопрос задан
  • 593 просмотра
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
XXX
@XXX
Решение где-то рядом
@ShamblerR Автор вопроса
Коллеги всеже смог найти теоретическую ошибку, теперь думаю как ее устранить не используя исключения файлов по полной маске.
и так
http://site.ru/test.htm - файл посколкьу содержит .

Но проблема есть в том что никто не запрещяет ставить точку в урле
http://site.ru.test.12.08.2004 - тое содержит файл получается колизия посколкьу урл у битрикса без слеша или со слешем два урла на 1 стать сделать технически невозможн (что кстати правильно но тем не менее)

решение
Исключить файлы по маске
(1|2|..) и только в этом случае делать редирект на без слеша.
У кого есть идеи как оптимизировать этот кусок снипета.

############################################################################
#### Убираем повторяющиеся слеши (/) в URL                              ####
############################################################################
RewriteCond %{REQUEST_URI} ^(.*)/{2,}(.*)$
# Проверяем, повторяется ли слеш (//) более двух раз.
RewriteRule . %1/%2 [R=301,L]
# Исключаем все лишние слеши.

############################################################################
#### Убираем слеши в конце URL для статических файлов (содержит точку)  ####
############################################################################
RewriteCond %{REQUEST_URI} \..+$  
# Если файл содержит точку.
RewriteCond %{REQUEST_FILENAME} !-d   
# Это не директория.
RewriteCond %{REQUEST_URI} ^(.+)/$      
# И в конце URL есть слеш.
RewriteRule ^(.+)/$ /$1 [R=301,L]     
# Исключить слеш.
Ответ написан
Ваш ответ на вопрос

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

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