Войти

Стандартный .htaccess

Для единообразия формирования URL страниц сайтов, и предотвращения появлений дубликатов страниц, вводится стандартная часть файла. .htaccess.

Данный конфиг позволяет решить следующие задачи:

  • Активация канонических директив
  • Установить основное зеркало сайта с www или без него с учетом сохранения http или https
  • Удалить любое количество "/" стоящих рядом до 1 ///--> /
  • Удалять "/" в конце URL если это файл
  • Добавлять "/" в конце URL если его там нет и это не файл
  • Удалить из URL index.php
  • Требования google page speed

Последовательность установки:

  1. Вставить код в начале .htaccess
  2. При вставке требуется указать правильное зеркало сайта, раскоментировав нужное
  3. Удалить старый redirect перенаправление на основное зеркало. 
  4. Проверить все новые redirect(ы) на  правильную работу  в условиях данного проекта.

Код конфигурационного файла каталога .htaccess.


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

############################################################################
#### Выбор основного зеркала (с www или без www)                        ####
############################################################################
    # 1. Удалить www
#RewriteCond %{ENV:HTTPS} on
    #Если включен https
#RewriteRule .* - [E=SSL:s]
    #То создаем переменную  ssl с текстом s
#RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
    # Проверяем, содержит ли домен www в начале URL.
#RewriteRule ^(.*)$ http%{ENV:SSL}://%1/$1 [R=301,L]
    # Перенаправляем удаляем www

    # 2. Добавить www
#RewriteCond %{ENV:HTTPS} on
    #Если включен https
#RewriteRule .* - [E=SSL:s]
    #То создаем переменную  ssl с текстом s
#RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
    # Если нет www в начале домена
#RewriteRule ^(.*)$ http%{ENV:SSL}://www.%{HTTP_HOST}/$1 [R=301,L]
    #Подставляем www и https если он включен.

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

############################################################################
#### Перенаправляем протокол http на https                              ####
############################################################################
#RewriteCond %{ENV:HTTPS} !on
   # Проверяем наличие https в URL.
#RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
   # Перенаправляем протокол на http.

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

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

############################################################################
#### Добавляем слеш(/), если его нет, и это не файл.                    ####
############################################################################
RewriteCond %{REQUEST_URI} !(.*)/$
   # Если слеша в конце нет.
RewriteCond %{REQUEST_FILENAME} !-f
   # Не является файлом.
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.

############################################################################
#### Компрессия статического контента для гугл  спид тест               ####
############################################################################
  AddType image/svg+xml .svg
  AddOutputFilterByType DEFLATE image/svg+xml  
  AddOutputFilterByType DEFLATE application/rss+xml
  AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
  AddOutputFilterByType DEFLATE application/x-font
  AddOutputFilterByType DEFLATE application/x-font-opentype
  AddOutputFilterByType DEFLATE application/x-font-otf
  AddOutputFilterByType DEFLATE application/x-font-truetype
  AddOutputFilterByType DEFLATE application/x-font-ttf
  AddOutputFilterByType DEFLATE application/x-javascript
  AddOutputFilterByType DEFLATE application/xhtml+xml
  AddOutputFilterByType DEFLATE application/xml
  AddOutputFilterByType DEFLATE font/opentype
  AddOutputFilterByType DEFLATE font/otf
  AddOutputFilterByType DEFLATE font/ttf
  AddOutputFilterByType DEFLATE image/svg+xml
  AddOutputFilterByType DEFLATE image/x-icon
  AddOutputFilterByType DEFLATE text/css
  AddOutputFilterByType DEFLATE text/html
  AddOutputFilterByType DEFLATE text/javascript
  AddOutputFilterByType DEFLATE text/plain
  AddOutputFilterByType DEFLATE text/xml
  AddOutputFilterByType DEFLATE image/svg+xml
</IfModule>
<IfModule mod_expires.c>
  ExpiresActive on
  ExpiresByType image/jpeg "access plus 3 day"
  ExpiresByType image/svg "access plus 3 day"
  ExpiresByType image/gif "access plus 3 day"
  ExpiresByType image/png "access plus 3 day"
  ExpiresByType text/javascript "access plus 3 day"
  ExpiresByType text/css "access plus 3 day"
  ExpiresByType application/javascript "access plus 3 day"
</IfModule>

############################################################################
#### Антивирус, только для 1С-Битрикс,                                  ####
############################################################################
#php_value auto_prepend_file "/home/bitrix/ext_www/SITE.RU/bitrix/modules/security/tools/start.php"
   #  укажите путь до файла 
   # включить тут /bitrix/admin/security_antivirus.php?lang=ru

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

Комментарии (6)

  1. Дмитрий
    Дмитрий 24.07.2017 Ответить
    Выделите текст в серой обводке -> скопируйте его в новый текстовый документ -> сохраните -> переименуйте в ".htaccess" - > profit!
    .htaccess c чужого сайта скачать нельзя (если у жертвы правильно настроен сервер и у вас нет доступа к файловой системе).
  2. Никита 07.08.2017 Ответить
    Доброго дня) Использую на сайте плагин landingSeo, подробнее с ним можно познакомиться по ссылке: https://github.com/goodcode1/LandingSeo
    Для его работы в .htaccess требуется внести такие строки:
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php [L,QSA]
    Сам сайт сделан на modx revo, и он уже имеет свой набор директив в .htaccess, и выглядит он примерно таким образом:
    RewriteEngine On
    RewriteBase /
    # The Friendly URLs part
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
    Проблема в том, что сейчас приходится выбирать между корректной работой плагина или работой других ресурсов типа sitemap, robots.txt, 404 и тд.
    Интересует, есть ли возможность заставить работать и то, и то одновременно)
    Подробнее ознакомиться с проблемой можно тут: https://toster.ru/q/448942
    Мой несчастный сайт: http://helpmyapple56.ru/glavnaya.html
  3. Социопат 08.08.2017 Ответить
    Ну во-первых, вы пишете:

    | Для его работы в .htaccess требуется внести такие строки:

    а на странице с документацией пишется совсем другое.

    Во-вторых, скрипт предназначен для статичных страниц и вам на Тостере это внятно прояснили, как и варианты решения проблем.

    Как вариант возможного решения: вы указываете маршрут на index.php, попробуйте указать вместо него просто адрес сайта или пустой слеш. Но вообще такое нужно смотреть и чинить, без полного кода решить наскоком не выйдет.


  4. Виктор
    Виктор 08.08.2017 Ответить
    1. скиньте весь .htaccess в ветку тостера, с кометами и тд.
    2.robots.txt - это файл а следовательно
    RewriteCond %{REQUEST_FILENAME} !-f
    должно обойти эти файлы, проблема не в этом правиле.
    3. По сути можно заменить первую часть на вторую поскольку будут урлы сохранять гет запросы но работать при этом все должно, поскольку наличие лишнего ГЕТ запроса никак не скажется на РАБОТУ сайта.
    4. После приведения всего .htacces скиньте несколько урлов списком и что они должны в конечном итоге отдавать. для полного понимания
    например
    https://site.ru/robots.txt -200 ok
    http://site.ru/url1 http:site.ru/url2
  5. Никита 09.08.2017 Ответить
    Доброго утра! Спасибо за отзывчивость!) Я дополнил свой вопрос на тостере, добавив "ответ" - https://toster.ru/q/448942

Оставить комментарий