Войти

Стандартный .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.7     ####
############################################################################
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.

####  Перенаправляем протокол http на https  (2 вариант)       ####
#RewriteCond %{SERVER_PORT} !^443$
#RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [QSA,R=301,L]


############################################################################
#### Убираем повторяющиеся слеши (/) в 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.

############################################################################
#### Компрессия статического контента для гугл  спид тест               ####
############################################################################
<IfModule mod_deflate.c>
  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   ####
############################################################################

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

  1. Дмитрий
    Дмитрий 24.07.2017 Ответить
    Выделите текст в серой обводке -> скопируйте его в новый текстовый документ -> сохраните -> переименуйте в ".htaccess" - > profit!
    .htaccess c чужого сайта скачать нельзя (если у жертвы правильно настроен сервер и у вас нет доступа к файловой системе).
  2. Сергей 10.08.2018 Ответить
    Мне немного непонятно, а как тогда он буде выглядеть для сайта: www.good-design.kiev.ua
  3. Виктор 16.01.2018 Ответить
    Точка в начале файла, это скрытый файл.
  4. Никита 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
  5. Социопат 08.08.2017 Ответить
    Ну во-первых, вы пишете:

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

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

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

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


  6. Виктор
    Виктор 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
  7. Никита 09.08.2017 Ответить
    Доброго утра! Спасибо за отзывчивость!) Я дополнил свой вопрос на тостере, добавив "ответ" - https://toster.ru/q/448942
  8. Максим 06.04.2018 Ответить
    добрый день. подскажите, пожалуйста. в Вашем примере файла htaccess есть параметр отвечающий за "Убираем повторяющиеся слеши (/) в URL" - пытаюсь использовать эти строки у себя, не срабатывает. или оставляет два слеша (если они в конце) и страница открывается или выкидывает на 404. если слеши в середине пути
  9. Виктор
    Виктор 11.04.2018 Ответить
    В .htaccess последовательность правил имеет значение, скорее всего оно конфликтует с каким-то другим правилом или ЧПУ движка.
    Нужно смотреть на весь конфиг
  10. Максим 05.05.2018 Ответить
    Добрый день, Виктор! Спасибо за ответ
    хостинг, как я понял, использует на сервере litespeed - может поэтому не срабатывает?

    вот полное содержание файла .htaccess

    # STARTNITRO
    ExpiresActive On

    #CSS JS XML TXT - 1 WEEK
    <FilesMatch "\.(xml|txt|css|js)$">
    Header set Cache-Control "max-age=604800, public"
    ExpiresDefault "access plus 1 week"
    </FilesMatch>

    #JPG JPEG PNG GIF SWF SVG - 1 WEEK
    <FilesMatch "\.(jpg|jpeg|png|gif|swf|svg|JPG|JPEG|PNG|GIF|SWF|SVG)$">
    Header set Cache-Control "max-age=604800, public"
    ExpiresDefault "access plus 1 week"
    Header set Last-Modified "Wed, 05 Jun 2009 06:40:46 GMT"
    </FilesMatch>

    #OTF WOFF TTF ICO PDF FLV - 1 WEEK
    <FilesMatch "\.(otf|ico|pdf|flv|woff|ttf)$">
    Header set Cache-Control "max-age=604800, public"
    ExpiresDefault "access plus 1 week"
    </FilesMatch>
    # ENDNITRO
    # STARTCOMPRESSNITRO
    RewriteEngine On
    RewriteRule .* - [E=HTTP_IF_MODIFIED_SINCE:%{HTTP:If-Modified-Since}]

    RewriteCond %{SCRIPT_FILENAME} !-d
    RewriteRule ^(\/?((catalog)|(assets)).+)\.css$ assets/style.php?l=4&p=$1&c=604800 [NC,L]

    RewriteCond %{SCRIPT_FILENAME} !-d
    RewriteRule ^(\/?((catalog)|(assets)).+)\.js$ assets/script.php?l=4&p=$1&c=604800 [NC,L]
    AddType image/svg+xml .svg
    AddOutputFilterByType DEFLATE image/svg+xml
    AddType application/x-font-woff .woff
    AddOutputFilterByType DEFLATE application/x-font-woff
    # ENDCOMPRESSNITRO
    # 1.To use URL Alias you need to be running apache with mod_rewrite enabled.

    # 2. In your opencart directory rename htaccess.txt to .htaccess.

    # For any support issues please visit: http://www.opencart.com

    Options +FollowSymlinks

    # Prevent Directoy listing
    Options -Indexes

    # Prevent Direct Access to files
    <FilesMatch "(?i)((\.tpl|\.ini|\.log|(?<!robots)\.txt))">
    Order deny,allow
    Deny fr om all
    </FilesMatch>

    # SEO URL Settings
    RewriteEngine On
    # If your opencart installation does not run on the main web folder make sure you folder it does run in ie. / becomes /shop/

    RewriteBase /

    # Выбор основного зеркала без www

    RewriteCond %{ENV:HTTPS} on
    RewriteRule .* - [E=SSL:s]
    RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
    RewriteRule ^(.*)$ http%{ENV:SSL}://%1/$1 [R=301,L]

    # Убираем повторяющиеся слеши (/) в URL

    RewriteCond %{THE_REQUEST} //
    RewriteRule .* /$0 [R=301,L]

    # Убираем слеши в конце URL для статических файлов (содержит точку)

    RewriteCond %{REQUEST_URI} \..+$
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteCond %{REQUEST_URI} ^(.+)/$
    RewriteRule ^(.+)/$ /$1 [R=301,L]

    # Добавляем слеш(/), если его нет, и это не файл

    RewriteCond %{REQUEST_URI} !(.*)/$
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !\..+$
    RewriteRule ^(.*)$ $1/ [L,R=301]

    # Убираем index.php, если он есть в конце URL

    RewriteCond %{REQUEST_METHOD} =GET
    RewriteCond %{REQUEST_URI} ^(.*)/index\.php$
    RewriteRule ^(.*)$ %1/ [R=301,L]

    # Компрессия статического контента для гугл спид тест

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

    RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
    RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]
    RewriteRule ^system/download/(.*) index.php?route=error/not_found [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
    RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

    ### Additional Settings that may need to be enabled for some servers
    ### Uncomment the commands by removing the # sign in front of it.
    ### If you get an "Internal Server Error 500" after enabling any of the following settings, restore the # as this means your host doesn't allow that.

    # 1. If your cart only allows you to add one item at a time, it is possible register_globals is on. This may work to disable it:
    # php_flag register_globals off

    # 2. If your cart has magic quotes enabled, This may work to disable it:
    # php_flag magic_quotes_gpc Off

    # 3. Set max upload file size. Most hosts will limit this and not allow it to be overridden but you can try
    # php_value upload_max_filesize 999M

    # 4. set max post size. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
    # php_value post_max_size 999M

    # 5. set max time script can take. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
    # php_value max_execution_time 200

    # 6. set max time for input to be recieved. Uncomment this line if you have a lot of product options or are getting errors wh ere forms are not saving all fields
    # php_value max_input_time 200

    # 7. disable open_basedir limitations
    # php_admin_value open_basedir none
  11. Виктор
    Виктор 14.05.2018 Ответить
    да вполне, нужно смотреть по логам.

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