ГлавнаяСтатьиWebFAQОбучениеКонтакты
Web
CSS
JavaScript
HTML
C#
jQuery
PHP
Flash
Yii / Yii2
Java
Net
CMS
3D
Parallax
MySQL
Ajax
XML
SEO
FTP
JSON
Design
Python
Back-end
Front-end
ASP
Perl
Template
Domain
Hosting
Plugin
Browser
DNS
SVG
Effect
Опрос
Какой язык программирования вы используете для написания сайта?








Авторизация
Логин:
Пароль:

Настройка .htaccess

Опубликовано 25.12.2019

Файл .htaccess - это дополнительный способ конфигурации сайта, который располагается на сервере Apache. Файл применяется для простой и удобной настройки сайта прямо из файловой системы и без перезагрузки веб-сервера. Изменяя настройки внутри файла, мы можем менять работу сайта. Чаще всего, файл располагается в корневом каталоге сайта. При этом его действие распространяется на весь сайт и на все подкаталоги. Если в другой каталог поместить свой .htaccess, то он будет действовать только на текущий каталог и подкаталоги.

Чтобы сервер воспринимал файл как конфигурационный, его название должно быть строго ".htaccess" без каких либо расширений.

И так, при работе с .htaccess файлом нам понадобятся записи разрешающие редиректы. Добавим их в начало файла:

Options +FollowSymLinks
RewriteEngine On

Данные строки необходимы для всех команд из данной статьи, поэтому желательно прописать их в начале файла.

HTTP/HTTPS

Например, у нас есть сайт domain.ru, который работает через SSL соединение. При этом для некоторых страниц нужно оставить возможность обращения по http протоколу. Для этого можно указать такие настройки:

RewriteBase /
RewriteCond %{REQUEST_URI} !^\/page/info.php$
RewriteCond %{REQUEST_URI} !^\/action/cron.php$
RewriteCond %{SERVER_PORT} !^443
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]

Таким образом, при открытии страницы http://domain.ru/page/info.php или http://domain.ru/action/cron.php сервер не будет делать принудительный редирект на https. Для всех остальных страниц при обращении через протокол http будет автоматически перенаправлять на https.

На некоторых серверах такие настройки могут не работать, поэтому можно немного изменить данный код:

RewriteBase /
RewriteCond %{REQUEST_URI} !^\/page/info.php$
RewriteCond %{REQUEST_URI} !^\/action/cron.php$
RewriteCond %{HTTP:X-SSL} !^yes$
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]

Убрать www

Для того чтобы убрать стандартный домен третьего уровня "www" из адреса сайта, можно воспользоваться такой конструкцией:

RewriteCond %{HTTP_HOST} ^www.domain.ru$ [NC]
RewriteRule ^(.*)$ https://domain.ru/$1 [R=301,L]

При таких настройках если адрес будет содержать в начале www, то произойдет редирект на домен второго уровня. Если Ваш сайт не использует SSL, то замените https на http.

Убрать /index.php и /index.html

Например, у нас есть сайт domain.ru. При обращении по адресу https://domain.ru открывается главная страница. Однако бывает такое, что главная страница дублируется по таким адресам:

https://domain.ru/index.php
https://domain.ru/index.html

Так как поисковые системы плохо относятся к дублированию страниц необходимо от них избавиться и оставить только одну главную страницу. Чтобы это сделать добавим в .htaccess следующие строки:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ https://domain.ru [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/
RewriteRule ^index\.html$ https://domain.ru [R=301,L]

При обращении к /sitemap.xml обрабатывать php код

Карта сайта sitemap.xml необходима для быстрого индексирования страниц Вашего сайта. Иногда стоит задача генерировать содержимое файла динамически с помощью php кода. Для этого нам поможет такая запись в .htaccess файле:

RewriteRule ^sitemap\.xml$ /sitemap.php [L]

Теперь при обращении по адресу http://domain.ru/sitemap.xml сервер выполнит файл sitemap.php и вернет результат без редиректа. Файл sitemap.php необходимо заранее создать в корне сайта.

Перенаправление всех запросов на единый файл index.php

Если Ваш сайт работает на cms системе, то, скорее всего все обращения к сайту обрабатываются одним контролирующим файлом index.php. Для того чтобы в .htaccess настроить такое поведение, необходимо прописать такие строки:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]

Значения !-f и !-d исключают перенаправления при запросе файла или каталога.

Кодировка сайта и обращений к базе данных

Если при открытии страниц сайты вы видете иероглифы вместо русского текста, то, скорее всего проблема в кодировке сайта. Возможно, помогут такие записи в .htaccess фале:

AddDefaultCharset utf-8
php_value default_charset utf-8

Кодировка utf-8 является стандартной. Вместо нее можно использовать любую другую.