Answer the question
In order to leave comments, you need to log in
Is it possible to improve custom for .htaccess config?
Good afternoon colleagues, I immediately ask you not to comment on those who do not understand what the conversation is about.
I wrote a standard custom for sites, because I got tired of doing the same work on all projects every time.
Task:
Collect standard redirects for SEO optimization of sites (gluing mirrors, etc.)
Optimize the code:
Add as many standard cases as possible.
NOT INCLUDED:
redirects from url to url since this is the business of each site, only general ones!
Yesterday I sketched a file, custom for .htaccess, developed for Bitrix, but suitable for most engines.
Latest version of the file: 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 ####
############################################################################
Answer the question
In order to leave comments, you need to log in
Colleagues still managed to find a theoretical error, now I'm thinking how to fix it without using file exclusions by full mask.
so
But the problem is that no one forbids putting a dot in the url
http://site.ru.test.12.08.2004 - that contains the file, it turns out to be a collision because the url of Bitrix without a slash or with a slash makes it technically impossible to make two urls per 1 ( which, by the way, is correct, but nevertheless)
the solution
Exclude files by mask
(1|2|..) and only in this case do a redirect to without a slash.
Does anyone have any ideas how to optimize this piece of snippet.
############################################################################
#### Убираем повторяющиеся слеши (/) в 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]
# Исключить слеш.
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question