S
S
ShamblerR2015-06-01 17:56:29
linux
ShamblerR, 2015-06-01 17:56:29

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   ####
############################################################################

The rest of the .htaccess follows
. Who will have thoughts on this, can somehow improve, or add the missing rules,
If there is something to add, write what and why.

Answer the question

In order to leave comments, you need to log in

2 answer(s)
S
ShamblerR, 2015-06-03
@ShamblerR

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 question

Ask a Question

731 491 924 answers to any question