BSoD

Как настроить файл htaccess. Введение в использование файла.htaccess. Защита локации паролем

Мы используем Apache httpd в качестве основного веб-сервера. Apache используется для организации большинства веб-серверов в мире и является самым массовым продуктом своего класса. Этот сервер обладает обширными возможностями конфигурации, является очень производительным и поддерживает все известные протоколы для работы веб-серверов. Специально для Apache созданы версии таких популярных языков программирования как Perl и PHP, а также этот сервер легко интегрируется с широко применяемыми СУБД (например, MySQL).

Главный сайт проекта находится по адресу httpd.apache.org , а основная документация по версии 1.3.хх доступна на странице httpd.apache.org/docs/ .

Пользователям мы предоставляем возможность самостоятельной конфигурации Apache путем использования соответствующих директив в файле . Таким образом можно решить большинство задач по конфигурации веб-сервера в условиях массового хостинга.

Индексный файл

Индексный файл или файл-индекс — это тот файл, который открывается по умолчанию при обращении пользователя через веб к каталогу, а не к конкретному файлу. Например, ваш посетитель запросит адрес http://ваш_домен/price/ , где price — название каталога. Индексный файл это тот файл, который будет показан пользователю при обращении к каталогу без указании имени конкретного файла в нем.

По умолчанию индексными файлами являются следующие: index.html, index.htm, index.php, index.php3, index.phtml, index.shtml, default.htm или default.html. Если вы хотите чтобы первым открывался какой-то иной файл, нужно переопределить текущие значения. Как это сделать читайте .

Назначение и использование файла .htaccess

Файл .htaccess (обратите внимание, что первый символ в названии файла — точка) применяется для управления веб-сервером Apache со стороны конечного пользователя хостинга. Вы помещаете в этот файл директивы , которые веб-сервер воспринимает и обрабатывает, выполняя действия в соответствии с настройками, которые были сделаны пользователем.

Файл .htaccess может быть размещен в корневом каталоге веб-сервера (прямо в каталоге www ). В этом случае директивы из такого .htaccess действуют по всему веб-серверу. Также .htaccess может находиться и в конкретном подкаталоге сервера. Тогда директивы, которые указаны в этом файле, «перекрывают» действие директив из «основного» файла, который размещен в каталоге www или в любом каталоге более высокого уровня. То есть, действие директив из .htaccess наследуется сверху вниз, но не наоборот. Изменения, внесенные в файл, вступают в силу немедленно. Это связано с тем, что информация из .htaccess перечитывается при каждом обращении к веб-серверу Apache.

В .htaccess может быть помещено большинство из доступных директив для веб-сервера. Следует заметить, что директивы, в описании которых в поле Context отсутствует упоминание .htaccess недоступны для использования в этом файле конфигурации. На примере директивы AddType видим, что поле Context содержит упоминание о .htaccess , соответственно вы можете ее использовать:

Если использовать нужную директиву не получилось, и вы увидели ошибку после добавления директивы в .htaccess , скорее всего, использование команды запрещено в условиях виртуального хостинга. Напишите в техническую поддержку , мы постараемся вам помочь. Просьба подробно описать проблему и указать цели, которых хотите достичь использованием данной директивы.

Web Application Firewall

Web Application Firewall (ModSecurity) необходим для обнаружения и предотвращения атак на веб-сайты. Проверка осуществляется определенным набором правил и, если она не пройдена, запрос к сайту отклоняется с ошибкой (403 forbidden).

В случае ложных срабатываний, отключать правила возможно через.htaccess, используя опции приведенные ниже:

  • SecRuleRemoveById - удалить правило по id
  • SecRuleRemoveByTag - удалить правило по тегу.

Определить, какое именно правило необходимо отключить, можно в журнале ошибок error.log

Пример отключения по ID :

SecRuleRemoveById 933100 933150

Примеры отключения по Tag :

SecRuleRemoveByTag "attack-injection-php" SecRuleRemoveByTag "CWAF"

Переопределение кодировки:

По умолчанию веб-сервер «отдает» все html-документы, которые размещены на сервере в кодировке windows-1251. Изменить тип кодировки, в которой веб-сервер будет «отдавать» информацию, можно в личном кабинете .

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

Изменить кодировку можно также с помощью файла .htaccess . Для этого добавьте в него строку

AddType "text/html; charset=koi8-r" .html .htm .shtml

Получив такой .htaccess , веб-сервер Apache станет выдавать клиентскому браузеру заголовок, в котором будет указано, что документ имеет кодировку koi8-r.

Если на вашем ресурсе существуют html-документы в разных кодировках, (ISO-8859-1, Windows-1250, Windows-1252, UTF-8), то вам, возможно, будет необходимо отключить принудительную выдачу заголовка с кодировкой windows-1251. Для этого в .htaccess добавляется строка:

AddDefaultCharset Off

При этом соответствующая кодировка должна быть прописана на каждой html-странице в виде тега

Пример: как закрыть директорию паролем

Одна из стандартных задач, которая решается путем использования .htaccess , это ограничение доступа к определенному каталогу на сервере. Например, нужно дать доступ к определенному каталогу отдельным посетителям, снабдив их при этом уникальным логином и паролем.

В каталоге, к которому хотим ограничить доступ по паролю, создаем файл .htaccess с такими директивами:

AuthType Basic AuthName "Some Name" AuthUserFile /home/uXXXXX /.htpasswd require valid-user

Путь /home/uXXXXX/.htpasswd обозначает полный путь к файлу паролей на диске нашего сервера. Если, например, вы поместите файл .htpasswd (в нем будут пароли) в домашний каталог, куда вы попадаете зайдя на сервер по FTP, то путь к этому файлу будет иметь вид /home/uXXXXX/.htpasswd , где uXXXXX — наименование вашей виртуальной площадки (например, u12345).

В директиве AuthUserFile указываем абсолютный путь к файлу с логинами/паролями, который мы создадим чуть позже. Если вы создаете файл .htaccess на своем компьютере, а не сразу на сервере при помощи текстового редактора, обратите внимание на то, что .htaccess должен передаваться по FTP строго в текстовом (ASCII) режиме .

Создаем файл паролей. Файл с паролями должен содержать строки вида login:password . Пароль должен быть зашифрован с использованием алгоритма MD5. Один из способов создать такой файл — воспользоваться программой, входящей в поставку Apache — htpasswd (на нашем сервере она находится в каталоге /usr/local/bin/ , полный путь — /usr/local/bin/htpasswd ).

Рассмотрим как создать файл паролей в unix shell прямо на сервере. Зайдем в shell, и будем выполнять следующие команды:

  • htpasswd -mbc .htpasswd user1 sNQ7j9oR2w создаем новый файл .htpasswd, в который добавляем запись для пользователя user1 с паролем, указанным в командной строке. Просьба обязательно заменить sNQ7j9oR2w на любой собственный пароль — здесь этот пароль указан только для примера
  • htpasswd .htpasswd user2 добавляем в уже существующий файл .htpasswd пользователя user2, а пароль вводим вручную в ответ на соответствующий запрос программы

Если вы используете Windows и не хотите пользоваться unix shell для генерации паролей, можно загрузить Windows-версию программы htpasswd и создать файл с паролями на своем компьютере, после чего загрузить его на сервер. Если у вас уже установлена Windows-версия Apache, файл htpasswd.exe можно найти в каталоге Program Files\Apache Group\Apache\bin\ .

Итак, получите htpasswd.exe и используйте его для генерации паролей таким образом:

  • htpasswd.exe -mc .htpasswd user1 создаем новый файл паролей htpasswd.exe , пароль и его подтверждение будут запрошены интерактивно
  • htpasswd.exe -m .htpasswd user2 добавляем пользователя user2 в существующий файл паролей htpasswd.exe , запросив пароль интерактивно

После окончания заведения всех логинов файл нужно загрузить на сервер.

Пример: переопределение индексного файла

Ситуация: пользователь обратился к каталогу http://www.ваш_домен.ru/price/. При таком запросе первым откроется и будет показан . Если вы хотите переопределить индексный файл и сделать так, чтобы первым открывался не index.htm, а, например, файл myindex.php , то сделать это можно поместив в файл.htaccess в соответствующем каталоге следующую инструкцию:

DirectoryIndex myindex.php

Получив .htaccess с таким содержимым, веб-сервер Apache откроет по умолчанию именно файл myindex.php.

Пример: запрет и разрешение выдачи листинга

В ряде случаев требуется выводить список файлов в каталоге (листинг каталога) в случае отсутствия в каталоге файла, который показывается по умолчанию. Для этого необходимо добавить в .htaccess следующую строку:

Options +Indexes

Файл .htaccess необходимо создавать именно в том каталоге, в котором планируется разрешить листинг. Данная директива будет действовать также и на все подкаталоги (это достигается включенной по умолчанию в настройках виртуального хоста директивой AllowOverride All ).

По умолчанию включена директива Options -Indexes , и в случае вы получите HTTP ошибку 403.

Если кодировка в именах файлов отображается не корректно, воспользуйтесь свойством Charset, чтобы указать нужную кодировку. Например для отображения кириллических символов в кодировке UTF-8 добавьте в файл.htaccess следующую инструкцию:

IndexOptions Charset=UTF-8

Пример: собственные страницы ошибок

Пример: запрет доступа с некоторых IP-адресов

Иногда возникает необходимость запретить доступ к сайту или его части с некоторых IP-адресов.

В таком случае необходимо создать в нужной директории файл .htaccess с директивами. Например, чтобы запретить доступ с IP-адреса 172.16.16.16:

Order Allow,Deny Allow from All Deny from 172.16.16.16

Теперь при попытке обратиться к сайту с IP-адреса 172.16.16.16 посетитель получит ошибку 403 или вашу страницу для этой ошибки .

Указание части адреса в виде 172.16.16 ограничит доступ из подсети 172.16.16/24.

Иногда требуется выполнить обратное действие и заблокировать доступ к сайту для всех IP кроме вашего (). Например, чтобы открыть доступ только для IP-адреса 172.16.16.16, добавьте следующую инструкцию в файл.htaccess:

Order Allow,Deny Allow from 172.16.16.16

С более подробной документацией вы можете ознакомиться в документации по Apache .

Пример: запрет доступа к некоторым файлам

Иногда возникает необходимость запретить доступ к определенным файлам. Например, к конфигурационным файлам, содержащим реквизиты доступа к базам данных, интерфейсам и т.п. Допустим, в файле config.cfg вы храните логин/пароль доступа к базе данных. Создаем в этой директории файл .htaccess с директивами:

Order allow,deny Deny from all

Теперь, если посетитель наберет в браузере нечто вида http://www.ваш_домен.ru//config.cfg , он получит ошибку 403 или вашу страницу для этой ошибки.

Пример: заголовок last-modified

В ряде случаев требуется, чтобы web-сервер выдавал HTTP-заголовок Last-Modified . К примеру, при регистрации вашего ресурса на Яндексе , возникает ошибка «Неправильные даты ». Для статических документов cервер будет выдавать значение last-modified всегда. Это действительно для html-файлов. Для SSI cервер будет выдавать значение last-modified в том случае, если прописана директива «XBitHack full» (просто пропишите эту строку в .htaccess ), и для файла, к которому происходит обращение, выставлен атрибут «исполняемый» для группы. В скриптах last-modified выдается иными средствами. Например, если учесть то, что php-скрипт генерирует код динамически, то самым логичным будет в качестве last-modified отдавать текущую дату и время./>

Реализуется это следующим образом:

Внимание: команда header должна выполняться в php-скрипте до того, как скрипт начнет выдавать html-текст в браузер пользователя.

Сейчас для организации работы подавляющего большинства сайтов в сети используется веб-сервер Apache. Он немного отстает в производительности, но зато очень прост в настройке и имеет огромное количество возможностей.

Веб-сервер Apache можно настраивать не только в главном конфигурационном файле, но и через файлы.htaccess. Эти файлы размещаются в определенных папках и указывают веб-серверу как нужно себя вести в этой папке и ее подкаталогах.

Настройка файла htaccess очень похожа на настройку главного файла конфигурации Apache. Но она немного отличается. С помощью этого файла вы можете настроить редиректы, внутреннее изменение url, права доступа, авторизацию по паролю и многое другое. В сегодняшней статье мы рассмотрим как правильно настроить htaccess для вашего сервера.

Мы уже начали тему в одной из предыдущих статей, но сегодня немного освежим информацию и рассмотрим более детально именно настройку htaccess.

Все директивы из файла htaccess выполняются точно так же, как если бы они были размещены в глобальном конфигурационном файле, только внутри директивы . Это не позволяет менять глобальные настройки, но вы можете очень тонко настроить поведение программы в папках, к которым у вас есть права доступа.

Общий синтаксис директив очень прост, это пары команд и их опций, разделенных пробелом, например:

Команда параметр1 параметр2 флаги

Самих команд достаточно много и мы будем рассматривать их на примерах действий, которые они выполняют. Кроме самих команд, тут могут использоваться вложенные структуры, например, для активации модулей или проверки доступности того или иного модуля. А теперь давайте перейдем ближе к тому как выполняется правильная настройка htaccess. Начнем с самых простых действий.

Настройка доступа htaccess

Довольно часто htaccess используется для управления доступом к папке. Для управления доступом используются три команды:

  • order - порядок;
  • deny - запретить;
  • allow - разрешить.

Сначала, с помощью опции order, нужно указать в каком порядке будут выполняться директивы, значение имеет только эта команда, и неважно в какой последовательности они расположены в файле.

Затем с помощью директивы allow или deny мы разрешаем или запрещаем доступ к папке с определенных адресов. Например, чтобы запретить все необходимо добавить в htaccess:

Order deny,allow
Deny from all

Но мы также можем разрешить доступ только с локальной сети:

Order deny,allow
Deny from all
Allow 192.168.0.

Если указано deny,allow, то проверка будет выполняться в таком порядке. Сначала все директивы deny, затем все директивы allow, и если ни одно из условий не подошло, то запрос пропускается.При allow,deny такой запрос будет по умолчанию отклонен. Например, предыдущий пример можно написать так:

Order allow,deny
Allow 192.168.0.

Модификация URL в htaccess

Наиболее часто htaccess используется для модификации URL во время выполнения или редиректов. За эту функциональность отвечает модуль mod_rewrite и обычно он активирован в большинстве конфигураций Apache.

Модификация URL в htacces выполняется с помощью трех директив, это RewriteBase , которая указывает префикс адреса, RewriteCond проверяет соответствие, и RewriteRule - изменяет URL в соответствии с регулярным выражением если все правила соответствия подходят.

Сначала нужно включить Mod_Rewrite, на случай если модуль еще не активен:

RewriteEngine on

Укажем, что в качестве префикса для URL нужно использовать корень:

И будем автоматически заменять URL адреса с index.html на index.php, обратите внимание, что исходный URL - это путь к запрашиваемому файлу относительно расположения файла htaccess:

RewriteRule index.html /index.php

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

  • ^ - начало строки;
  • $ - конец строки;
  • . - любой символ;
  • * - любое количество любых символов;
  • ? - один определенный символ;
  • - последовательность символов, например, от 0 до 9;
  • | - символ или, выбирается или одна группа, или другая;
  • () - иcпользуется для выбора групп символов.

В регулярных выражениях htaccess также можно использовать переменные с данными, полученными из заголовков запроса, например:

  • %{HTTP_USER_AGENT} - поле User-Agent, которое передает браузер пользователя;
  • %{REMOTE_ADDR} - IP адрес пользователя;
  • %{REQUEST_URI} - запрашиваемый URI;
  • %{QUERY_STRING} - параметры запроса после знака?.

Это наиболее часто используемые переменные, но их есть намного больше, остальные вы можете найти в официальной документации . Регулярные выражения открывают более широкие возможности, например, вы можете заменять во всех страницах html на php:

RewriteEngine On;
RewriteBase /;

Директива RewriteCond дает еще больше гибкости, вы можете выбрать к каким адресам стоит применять модификацию, например, будем переопределять данные только для версии с www:

RewriteBase /;
RewriteCond % {HTTP_HOST} ^www.site.ru$
RewriteRule ^(.*)\.html$ $1.php

Таким образом, вы можете выполнять любые преобразования ваших URL без фактических редиректов куда-либо. Но дальше мы рассмотрим как делать редиректы.

Настройка редиректов в htaccess

Настройка редиректов htaccess выполняется похожим образом, с помощью того же самого модуля mod_rewrite, только теперь вместо модификации url мы указываем флаг с нужным действием и кодом редиректа.

Самый простой редирект можно выполнить без mod_rewrite, с помощью такой строки:

Redirect 301 /index.html http://www.site.ru/index.php

Но обычно нужны перенаправления с более широким действием. Все выглядит очень похоже, только теперь мы используем флаг чтобы не учитывать регистр, [L] для прекращения обработки и [R] - для редиректа. Например, перенаправление htaccess с версии без www на домен с www:

RewriteCond %{HTTP_HOST} ^site\.ru$
RewriteRule ^(.*)$ http://www.site.ru/$1

Значение R=301 означает код редиректа, который будет возвращен клиенту, можно использовать 301, 302 и т д. Редирект htaccess с домена www на домен без префикса будет выглядеть так:

RewriteCond %{HTTP_HOST} ^www.site\.ru$
RewriteRule ^(.*)$ http://site.ru/$1

Таким же образом можно сделать переадресацию:

RewriteRule ^старый_адрес /новый_адрес/$1

Редирект с http версии на https:

RewriteCond %{SERVER_PORT} ^80$
RewriteCond %{HTTP} =on
RewriteRule ^(.*)$ https://site.ru/$1

Настройка страниц ошибок в htaccess

При возникновении каких-либо ошибок во время генерации страницы, веб-сервер выдает краткое сообщение и код ошибки. Но пользователям будет намного понятнее в чем дело, если вы сделаете для каждой ошибки отдельную страницу с картинками и полноценным объяснением.

Настройка htaccess для этого пункта будет очень полезной. Вы можете использовать директиву ErrorDocument. С помощью нее можно задать html страницы для ошибок 4хх и 5хх. Например, для 404:

ErrorDocument 404 http://site.ru/error/404.shtml
ErrorDocument 403 http://site.ru/error/403.shtml
ErrorDocument 401 http://site.ru/error/401.shtml
ErrorDocument 500 http://site.ru/error/500.shtml

Кэширование в htaccess

Браузер позволяет хранить в своем кэше изображения, файлы скриптов, стилей и другие медиафайлы определенное время. Время жизни кэша задается веб-сервером с помощью специальных заголовков. Их можно настроить с помощью модуля expires.

Сначала активируем модуль и устанавливаем период кэширования по умолчанию:

ExpiresActive On
ExpiresDefault "access plus 1 month"

Теперь мы можем настроить кэширование для каждого mime типа файлов:

ExpiresByType text/html "access plus 1 month 15 days 2 hours"
ExpiresByType image/gif "access plus 5 hours 3 minutes"
ExpiresByType image/x-icon "access plus 2592000 seconds"

В первой строке мы указываем, что страницы html нужно считать годными на один месяц 15 дней и два часа с момента загрузки. Доступны такие типы файлов:

  • image/x-icon;
  • image/jpeg;
  • image/png;
  • image/gif;
  • application/x-shockwave-flash;
  • text/css;
  • text/javascript;
  • application/javascript;
  • application/x-javascript;
  • text/html;
  • application/xhtml+xml;

Чтобы быть уверенным что эта конструкция не вызовет ошибок заключите ее в if:


Сжатие файлов в htaccess

Для сжатия в Apache можно использовать модуль deflate. Здесь достаточно просто перечислить mime типы файлов, которые нужно сжать. Например:

AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript

Вы также можете заключить конструкцию if, чтобы проверить поддерживается ли этот модуль:


Выводы

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

На завершение предлагаю видео с обзором конфигурационного файла Apache:

Файл htaccess - настройка и примеры использования - 3.8 out of 5 based on 21 votes

Файл htaccess позволяет производить конфигурирование и переопределение настроек веб-сервера Apache и подобных ему серверов. С его помощью можно установить разрешения и параметры для работы сервера у определенных пользователей хостинга и даже на отдельных папках определенного пользователя.

Чаще всего его применяют для создания 301 редиректа со старых URL на новые, переназначение типов файлов, управляемый доступ к каталогом и многого другого. Благодаря файлу htaccess не нужно обращаться к основному файлу конфигураций и затрагивать работу сервера целиком.

Что собой представляет файл htaccess и для чего используется

Как уже упоминалось, htaccess используется для установки некоторых параметров серверов Apache и других серверов. Несмотря на большое и странное расширение, настройка файла.htaccess производится путем открытия и изменения его содержимого с помощью любого текстового редактора.

Файл htaccess был придуман специально для того, чтобы можно было предоставить возможность менять конфигурацию сервера каждому пользователю, затрагивая только свой собственный сайт, а не весь сервер целиком. Всем известно, что основные директивы конфигурации Apache находятся в файле httpd.conf. Однако у большинства пользователей, а если говорить о виртуальном хостинге, то у всех пользователей, нет возможности получить доступ к нему и прав на модификацию, так как это действие будет распространяться на всех.

Файл с расширением htaccess часто называют динамическим. Это обусловлено тем, что сервер должен каждый раз обращаться к нему, когда потребуется выполнить запрос к содержащему его каталогу. Пожалуй, это существенное преимущество, так как изменения, внесенные пользователем в файл, сразу вступят в силу без потребности перезагрузки сервера. В случае внесения изменений в главный конфигурационный файл перезапуск сервера – обязательное условие вступления их в силу.

Безусловно не все так гладко, как хотелось бы, так как использование htaccess немного сказывается на производительности сервера, тем нем менее, в случае закрытого доступа к основному конфигурационному файлу, данный способ является самым простым и удобным методом для изменения параметров.

Некоторые особенности использования htaccess:

1. В нем можно переопределить большое количество директив, прописанных в главном файле httpd.confg

2. Если расположить htaccess-файл в корневой каталог, он распространится на весь сайт (исключения составят только те каталоги, в которых расположен собственный конфигурационный файл, и каталоги, расположенные ниже в древовидной структуре)

3. Разместить htaccess-файл можно в любой каталог, а его директивы будут применены ко всем подкаталогам

4. Htaccess не доступен пользователю для просмотра из браузера, так как относится к категории «системные».

Таким образом, с помощью htaccess пользователь получает гибкость в настройке собственного сервера и может применять следующие параметры:

  • Директивы простого перенаправления (редирект);
  • Директивы сложного перенаправления (mod_rewrite);
  • Индексные страницы;
  • Обработка ошибок;
  • Определение кодировки;
  • Управление доступом к директориям и файлам;
  • Паролирование директорий;
  • Опции PHP.

Примеры наиболее частого использования файла htaccess

Сейчас мы рассмотрим самые распрострнные рабочие варианты использования htaccess для настройки сайта.

Прежде чем мы приступим обратите внимание на следующие моменты:

2. Для того, чтобы создать новый файл с расширением htaccess, необходимо, открыть блокнот или другой текстовый редактор, написать код, сохранить файл, указав расширение.htaccess (точка в переди). Затем остается забросить его в директорию, для которой он предназначался.

3. Синтаксис.htaccess

Пути к файлам (директориям) указываются от корня сервера.

DirectoryIndex /home/st5155/www/data/home.html

В случае настройки файла htaccess лежащего в корневой папке сайта, пути указываются от корня этой папки.

DirectoryIndex /home.html

Домены записываются с указанием протокола http:// или https://

Redirect / http://vash-sait.ru

Файл имеет название именно "точка" htaccess.

Для создания закомментированной строчки используйте знак #.

Редактировать файл удобнее всего при помощи редактора AkelPad, входящего в состав Total Commander, достаточно его выделить и нажать F4.

Простое перенаправление - директива Redirect

1. Осуществление перенаправления на новые страницы сайта

Если на сайте были перемещены страницы на новые адреса, то пользователь или поисковый робот, обратившись по старому адресу, наверняка их не увидит. Чтобы склеить старый и новый адреса страницы можно применить простой 301 редирект. Для этого в файле конфигурации htaccess необходимо прописать следующий код:

Redirect 301 /staraya.html http://vash-sait.ru/novaya.html

2. Приведение фидов к общему формату

Раньше использовались различные форматы фидов, такие как: Atom, RSS, Rdf. Сегодня RSS является основным и самым популярным среди них, поэтому можно позаботиться о том, чтобы другие форматы перенаправлялись в один. Для этого также используется файл htaccess и следующий код:

RedirectMatch 301 /feed/(atom|rdf|rss|rss2)/?$ http://vash-sait.ru/feed/

Сложное перенаправление - директива RewriteRule

1. Перенаправление домена с www на без www.

Очень часто приходится использовать 301 редирект в htaccess для склеивания доменов с www и без www. Раньше поисковые системы считали такие адреса совершенно различными и смотрели на них как на разные сайты. Сегодня задача по склейке возлагается на поискового робота, но никогда не лишним будет указать корректное зеркало. К тому же, у самих не будет никакой путаницы.

Options +FollowSymLinks RewriteEngine On RewriteCond %{HTTP_HOST} ^www.vash-sait\.ru$ RewriteRule ^(.*)$ http://vash-sait.ru/$1

2. Перенаправление посетителей на разные старницы в зависимости от IP-адреса посетителя.

В htaccess имеется возможность указать на какую страницу, будет перенаправлен пользователь с конкретным IP-адресом. Например, перенаправление посетителей с ip адресом 183.11.101.1 на страницу kontakt.html

SetEnvIf REMOTE_ADDR 183.11.101.1 REDIR="redir" RewriteCond %{REDIR} redir RewriteRule ^/$ /kontakt.html

3. Перенаправление в случае обновления веб-ресурса

Во время тестирования или обновления ресурса пользователь не сможет попасть на сайт. Однако будет неправильным не предупредить его об этом. В.htaccess можно прописать код, который будет перенаправлять пользователя на информационную страницу, описывающую сущность проблемы (причины, сроки и т. д.).

RewriteEngine on RewriteCond %{REQUEST_URI} !/info.html$ RewriteCond %{REMOTE_HOST} !^14\.124\.354\.80 RewriteRule $ http://vash-sait.ru/info.html

Где 14.124.354.80 - заменить на свой IP адресс.

4. Защита от хотлинков

Не для кого не секрет, что сегодня все чаще воруют информацию с сайтов. Иногда только текстовую, а иногда и вместе с графическими изображениями. И каждый раз когда на сторонний сайт будет приходить посетитель эти изображения будут грузится с вашего хостинга создавая нагрузку и сжигая трафик. Чтобы это предотвратить добавляем следующий код:

RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://([ -a-z0-9] \.)?vash-sait\.ru RewriteRule \.(gif|jpe?g|png)$ -

В приведенном выше примере на сайте грузящем изображение будет появляться ошибка 403, если желаете чтобы вместо картинки отображалась определенная картинка, то последнюю строку замените на следующую:

RewriteRule \.(jpg|png|gif)$ http://vash-sait.ru/images/imageinfo.jpg

5. Перенаправление на безопасное https-соединение

В.htaccess можно настроить перенаправление на безопасное https соединение, чтобы все пользователи работали только через данный протокол, гарантирующий безопасность и надежность передачи данных между сервером и клиентом.

RewriteEngine On RewriteCond %{HTTPS} !on RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

6. Автоматическая подстановка слеша в конце адреса.

Очень распространены ситуации, когда URL-адрес, заканчивается именем каталога: http://vash-sait.ru/images/raznoe

Apache самостоятельно может исправить ошибку и сделать 301-е перенаправление, добавив к ссылке недостающий слеш. Таким образом, пользователь не ощутит никакой разницы и получит в ответ необходимую страницу. Но на выполнение такого действия понадобится в два раза больше времени. Следующий код всегда будет добавлять / в конце адреса.

RewriteCond %{REQUEST_URI} /+[^\.]+$ RewriteRule ^(.+[^/])$ %{REQUEST_URI}/

7. Блокировка пользователей пришедших с определенного сайта

Если владелец сайта не хочет, чтобы его ресурс посещали пользователи, зашедшие с определенного домена и требуется им закрыть доступ - htaccess также готов помочь. Вы можете перекрыть трафик с определенных сайтов используя страницу 403 или «запрет доступа». Полезна данная настройка тогда, когда на ваш сайт появились ссылки с сайтов с запрещенным контентом и по ним идет трафик на ваш сайт.

RewriteEngine on RewriteCond %{HTTP_REFERER} zapretnui-sait.com RewriteCond %{HTTP_REFERER} zapretnui-sait.com RewriteRule .* - [F]

Индексные страницы - директива DirectoryIndex

1. Изменение индексной старницы загружаемой по умолчанию

Обычно по умолчанию индексными страницами является index.htm, index.php или index.html, при обращении к директории сайта сразу происходит поиск данных файлов. Но при необходимости можно переопределить индексную страницу на любую другую. Подобная задача также решается с использованием htaccess-файла.

DirectoryIndex mypage.html

Имеется возможность указать две и более страницы. Стоит учитывать, что они будут отыскиваться в той последовательности, в которой перечислены в конфигурационном файле за директивой DirectoryIndex.

DirectoryIndex index.shtml index3.php index.html index.htm

Обработка ошибок - директива ErrorDocument

1. Пользовательская страница ошибок

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

ErrorDocument 404 "/404.html"

2. Создание своих страниц с описанием ошибок

Для тех, кто устал от привычных страниц, выводящих описание ошибок, произошедших на сайте, предоставляется возможность воспользоваться своими собственными заготовками. Нужно лишь самому сверстать несколько файлов с разрешением *.html, с необходимым содержимым и внести запись в htaccess-файл.

ErrorDocument 401 /errors401.html ErrorDocument 403 /errors403.html ErrorDocument 404 /errors404.html ErrorDocument 500 /errors505.html

Чтобы вы знали что помещать в каждую из страниц ошибок, кратико опишем их значения.

  • 401 - Требуется авторизация (Authorization Required)
  • 403 - пользователь не прошел аутентификацию, запрет на доступ (Forbided)
  • 404 - запрашиваемый документ (файл, директория) не найден (Not Found)
  • 500 - внутренняя ошибка сервера - ошибка скрипта или ошибка в синтаксисе файла.htaccess - (Internal Server Error)

Определение кодировки

1. Определение кодировки, в которой сервер "отдает" файлы

Чтобы у пользователя на дисплее монитора не выводились непонятные для него символы, из которых не представляется возможности прочесть слова, необходимо указать корректную кодировку. Даже при отсутствии тега < Мета http-equiv = "Content-Type"> текст на странице будет всегда корректным и поможет в этом снова htaccess-файл.

AddDefaultCharset UTF-8

2. Определение кодировки на загружаемые файлы

Подобная ситуация может возникнуть в том случае, когда пользователь загружает на сервер файл и его содержимое может быть перекодировано. Чтобы использовалась требуемая кодировка htaccess должен содержать код, указывающий что все загружаемые файлы должны будут открываться с кодировкой UTF-8.

CharsetSourceEnc UTF-8

Управление доступом к директориям и файлам

1. Запретить доступ ко всем файлам

Самый простой способ запретить просматривать файл – установить пароль, но не всегда этого достаточно. В некоторых случаях у пользователя не должно быть прав на просмотр любых файлов или каталогов (например нужно заблокировать системные каталоги, изменения в которых могут усугубить работу сервера). В htaccess-файле прописывается отрывок кода, лишающий всех привилегий пользователей.

2. Разрешить доступ с определенного IP

Файл.htaccess используется для конфигурации сервера Apache, впрочем, и для нескольких других серверов тоже. Не смотря на странное расширение, он является простым текстовым файлом, который можно модифицировать в любом редакторе. В данном уроке мы рассмотрим, как.htaccess можно использовать в своих проектах.

Файл.htaccess использует такой же формат, как и основной конфигурационный файл для Apache: httpd.conf . Большинство установок можно использовать и в том и в другом файлах.

Установки, заданные в файле.htaccess в каталоге, будут иметь более высокий приоритет перед установками, заданными в httpd.conf , для данного каталога и его подкаталогов.

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

Перенаправления и изменение URL

Популярное использование файла.htaccess - задание перенаправлений или изменений URL. Данный метод помогает в целях SEO изменять имя домена, или перестраивать файловую структуру проекта, или делать длинные трудно запоминаемые адреса URL простыми и понятными.

Перенаправления

Перенаправления могут быть очень простыми, например:

Redirect 301 ^old\.html$ http://localhost/new.html

В данном случае используется код статуса HTTP 301 (перемещено постоянно) и все запросы к old.html перенаправляются на new.html . Здесь используется регулярное выражение для определения соответствия URL правилу, что добавляет сложности в построение правила, но придает уверенности в правильности URL. Требуется указывать полный адрес URL ресурса, на который происходит перенаправление.

Изменения

Правило изменения также может быть очень простым:

RewriteEngine on RewriteRule ^old\.html$ new.html

В данном примере происходит простое перенаправление с одного файла на другой, которое выполняется прозрачно, без изменения содержания адресной строки в браузере. Первая директива, RewriteEngine on , просто гарантирует, что механизм изменения запущен.

Чтобы обновить содержание адресной строки браузера посетителя, мы можем использовать флаг R в конце правила RewriteRule:

RewriteRule ^old\.html$ http://hostname/new.html

Флаг r приводит к внешнему перенаправлению, поэтому адрес URL будет соответствовать новой странице. Также можно использовать код статуса для флага, что приведет к обновлению страницы в браузере посетителя.

Одно возможное использование перенаправлений - изменение адресов URL к более простой форме для посетителей и поисковых роботов. Рассмотрим пример:

RewriteRule ^products/([^/]+)/([^/]+)/([^/]+) product.php?cat=$1&brand=$2&prod=$3

Данное правило позволяет использовать посетителю адрес URL наподобие products/turntables/technics/sl1210 , который будет трансформироваться в product.php?cat=turntables&brand=technics&prod=sl1210. Круглые скобки между слешами в регулярном выражении примера выполняют объединение в группы - мы можем использовать каждую из них как $1 , $2 и $3 соответственно. Комбинация [^/]+ в скобках соответствует любому символу, кроме слеша, в любых количествах.

На практике, изменение URL имеет существенно более сложные правила, чем описанные в наших примерах, но они позволяют решить очень сложные задачи.

Пользовательская страница ошибок

Показывать на сайте стандартную страницу 404 - непрактично. На многих сайтах данная возможность используется, чтобы предложить посетителю страницу ошибок, которая соответствует по стилю остальному содержанию и несет дополнительную информацию, которая может удержать посетителя.

Правило для изменения странницы 404 очень похоже на правило перенаправления:

ErrorDocument 404 "/404.html"

Если происходит ошибка 404, будет выводиться указанная страница. Также можно сделать страницы для отображения других серверных ошибок.

Ограничения доступа к определённым ресурсам

С помощью файла.htaccess мы можем ограничить доступ к любому файлу или каталогу. Например, код:

AuthName "Введите имя пользователя и пароль" AuthUserFile /path/to/.htpasswd Require valid-user AuthType Basic

Нужно разместить в каталоге, который требуется защитить от свободного доступа. Директива AuthName определяет сообщение, которое будет выводиться в диалоговом окне для ввода пароля, а в правиле AuthUserFile определяется путь к файлу.htpasswd . Директива Require определяет, что только зарегистрированные пользователи могут получить доступ к файлу.

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

AuthName "Введите имя пользователя и пароль" AuthUserFile /path/to/.htpasswd Require valid-user AuthType Basic

Для использования данной возможности требуется файл.htpasswd, который содержит разделенный двоеточиями список имен пользователей и зашифрованных паролей для доступа к закрытым ресурсам. Данный файл должен храниться в каталоге, недоступном из сети. Существуют различные инструменты для генерации такого файла автоматически, так как пароль должен храниться в зашифрованном виде.

Блокируем доступ для определенных посетителей

Еще одним использованием файла.htaccess является быстрое и простое блокирование всех запросов с определенного IP адреса или агентов. Нужно просто добавить в файл.htaccess правила:

Order allow,deny deny from 192.168.0.1 allow from all

Директива order указывает серверу Apache в каком порядке рассматривать директивы allow/ deny . В примере директива allow оценивается первой, а затем следует работа с deny . Правило allow from all рассматривается первым (несмотря на то, что в файле оно определено после правила deny) и все IP адреса разрешаются. Затем, если IP адрес клиента соответствует указанному в директиве deny , то доступ ему блокируется. Можно блокировать доступ диапазону IP адресов, указав, например, 192.168 .

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

RewriteCond %{HTTP_USER_AGENT} ^OrangeSpider RewriteRule ^(.*)$ http://%{REMOTE_ADDR}/$

В данном примере любой клиент, у которого строка HTTP_USER_AGENT начинается с OrangeSpider (плохой бот), будет перенаправлен по адресу, с которого пришел. Регулярное выражение соответствует любому единичному символу (.) в любых количествах (*) , а для адреса используется переменная %{REMOTE_ADDR} . Флаг l указывает для сервера Apache, что данное правило является последним для клиента и никаких других операций для него выполнять не нужно.

Указываем для IE режим вывода

Кроме управления ответами сервера на определенные запросы, мы можем влиять на браузеры пользователей, например, указывать IE определенный механизм вывода. Можно использовать модуль mod_headers, если он присутствует для установки заголовка X-UA-Compatible:

Header set X-UA-Compatible "IE=Edge"

Добавление данной строки в файл.htaccess выдаст инструкцию для IE использовать самый лучший доступный режим вывода. Мы также можем избежать использования данного заголовка для файлов, где он не требуется, с помощью правила :

Header unset X-UA-Compatible

Включаем кеширование

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

Например:

ExpiresActive on ExpiresByType image/gif "access plus 1 month" ExpiresByType image/png "access plus 1 month" ExpiresByType image/jpg "access plus 1 month" ExpiresByType image/jpeg "access plus 1 month" ExpiresByType video/ogg "access plus 1 month" ExpiresByType audio/ogg "access plus 1 month" ExpiresByType video/mp4 "access plus 1 month" ExpiresByType video/webm "access plus 1 month"

Вы можете добавлять правила ExpiresByType для любых типов содержания. Директива ExpiresActive on просто включает генерацию заголовка устарения ресурса. Данная директива зависит от наличия модуля mod_expires на сервере Apache.

Разрешаем сжатие

Еще одним способом влияния на производительность ресурса является использование сжатия:

FilterDeclare COMPRESS FilterProvider COMPRESS DEFLATE resp=Content-Type $text/html FilterProvider COMPRESS DEFLATE resp=Content-Type $text/css FilterProvider COMPRESS DEFLATE resp=Content-Type $text/javascript FilterChain COMPRESS FilterProtocol COMPRESS DEFLATE change=yes;byteranges=no

Данная схема сжатия работает на новых версиях Apache (2.1+) с установленным модулем mod_filter . Он использует алгоритм DEFLATE для сжатия содержания. В примере мы указываем text/html , text/css и text/javascript в качестве типов ресурсов, которые будут сжиматься.

Определение фильтра начинается с директивы FilterDeclare с опцией COMPRESS . Затем перечисляются типы содержания, на которые будет действовать фильтр. Правило FilterChain указывает серверу построить цепочку на основании списка правил FilterProvider . Директива FilterProtocol позволяет задавать опции, которые используются фильтром при выполнении. Необходимо указать опции change=yes (содержание может изменяться фильтром (в нашем примере - сжиматься)) и byteranges=no (фильтр может использоваться только к полным файлам).

В старых версиях Apache используется модуль mod_deflate для конфигурирования сжатия DEFLATE. Здесь имеется меньше возможностей для управления фильтром, но правила более простые:

SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE text/html text/css text/javascript

В примере устанавливается алгоритм компрессии с помощью правила SetOutputFilter и определяются типы файлов содержания для фильтра с помощью правила AddOutputFilterByType .

Обычно сервер использует один из описанных модулей, в зависимости от версии сервера Apache. Как правило, вы знаете какой модуль будет использоваться. Но если создается обобщенный файл htaccess , который может быть использован на разных серверах, то можно в него включить оба набора правил с помощью директивы . Таким образом будут использоваться нужные правила и удастся избежать генерации ошибки 500, если в файле конфигурации встречаются правила для неустановленных модулей. Также нужно помнить, что при размещении серверов на хостинге, который поддерживает большое количество сайтов на одном процессорном блоке, компрессия может быть отключена, чтобы не создавать большой нагрузки

Заключение

В данном уроке рассмотрены наиболее часто используемые применения файла htaccess . Приведенная здесь информация является введением в очень популярную тему. Имеется много других опций и конфигураций, которые стоит изучить и использовать в своих интересах.

В данной статье Вы узнаете о настройках файла htaccess: о редиректах и перезаписи, а также о конфигурировании веб-сервера и его защите.

Что такое.htaccess? (Hypertext Access)

Это файл-конфигуратор на уровне каталога, который загружается сервером и дает возможность существенно изменить его поведение (перенаправления, включение/отключение определенных функций). Этот файл также позволяет защитить некоторые разделы сайта.

Из-за специфики названий тип файла htaccess не всегда заметен. Чтобы его увидеть, необходимо активировать “ dot files ” или “ .files ” в вашем программном обеспечении FTP/Cpanel. Если возникают сложности, можно создать и редактировать файл как.txt (просто изменить расширение и название во время загрузки).

Всегда делайте бэкап htaccess, когда собираетесь внести какие бы то ни было изменения. Если ошибетесь, сайт высветит ошибку 500 Internal Server Error, и для последнего изменения можно будет просто поместить символ # перед кодом в файле htaccess.

  1. Вы можете комментировать ссылки в htaccess с помощью # , количество символов не имеет значения; к примеру, ## или ### можно использовать для описательных комментариев, а один # - для активации/деактивации кода.
  2. Используйте блокнот для редактирования в Windows, это удобно.
  3. Всегда делайте бэкап.
  4. Htaccess применяется к каталогу, в котором находится, и, таким образом, ко всем каталогам уровнем ниже; это значит, что при перемещении в корневой каталог, он сможет управлять всем сайтом.
  5. Ошибки в htaccess провоцируют 500 Internal Server Error ( внутреннюю ошибку сервера), но без паники - восстановите резервную копию или откомментируйте последний код.

Перезапись кода

Просто поместите этот код в файл htaccess в верхней части, чтобы включить перезапись.

## Rewrite Engine Code ##

Options +FollowSymLinks

RewriteEngine on

Управление ошибками

По умолчанию браузер показывает страницу 404, с помощью htaccess страницу можно изменить. Создание интересной страницы 404 - тема для отдельной статьи.

Вы можете создавать собственные страницы в любом формате PHP/HTML.

Они не обязательно должны быть в корневом каталоге, но обязательно на одном сервере.

Если поместите URL целиком, тогда статус 404 не появится, скорее всего будет 301 или 200 Error.

ErrorDocument 404 http://www.example.com/404.html

## Error Handling Codes ##

ErrorDocument 401 /401.html

ErrorDocument 403 /403.html

ErrorDocument 404 /404.html

ErrorDocument 400 /400.html

Можно использовать больше или меньше кодов. Полный список кодов ошибок по ссылке Wikipedia .

Временная блокировка индексации

К примеру, может понадобиться, чтобы некоторое время люди вначале попадали на промостраницу. (Вы можете использовать index.php и для других целей).

Это больше относится к сфере общей безопасности и юзабилити, чем к .

Этот сниппет кода блокирует доступ пользователей к спискам файлов.

## Block Index Display ##

Options All -Indexes

Set Default Index File

В любом случае, это удобный код. Нужно только изменить файл; тип файла не обязательно должен быть в HTML.

## Set Default Index Files ##

DirectoryIndex newindex.html

Защита Htaccess

Ваш файл htaccess потенциально уязвим, поэтому обезопасьте его.

## Secure htaccess file ##

Order Allow,Deny

Если у вас WordPress, такой код защитит файл wp-config.php.

## Secure wp-config.php ###

Order Allow,Deny

Защита локации паролем

С помощью htaccess вы можете защитить определенные сегменты сайта. Вот полезный инструмент для создания этих файлов http://www.tools.dynamicdrive.com/password/

Так, с помощью и похожего файла htpasswd вы можете блокировать общий доступ к любому файлу или папке на сайте.

Используя тот же метод, что и для htaccess, создайте текстовый файл без названия, тип файла htpasswd. Он будет содержать список имен пользователей и паролей для входа в закрытые разделы, формат такой:

Нужно загрузить файл htpasswd в соответствующее место на сервере с помощью любой программы для пересылки файлов, это должен быть каталог не для общего доступа (не помещайте в /www/ или /htdocs/ ). И еще нужно записать путь файла из корневого каталога, это может выглядеть так:

/private/script/.htpasswd “.

После загрузки в htaccess добавляется новый раздел.

AuthName “Restricted Area”

AuthUserFile /private/script/.htpasswd

require valid-user

Блокировка прямых ссылок (хотлинкинг)

htaccess экономит полосу пропускания, таким образом решается проблема известная как хотлинк (включение в веб-страницу ресурсов чужого сервера) .

Если хотите, чтобы люди не ссылались на ресурсы вашего сайта, используйте следующий код. Свой домен необходимо добавить как исключение, конечно же, поскольку это блокирует все другие сайты.

## Block Hotlinking ##

RewriteEngine On

RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mysite\.com/

RewriteCond %{HTTP_REFERER} !^$

Если только 1-2 специфических сайта (обычно социальные) приводят к данной проблеме, используйте код:

## Block Hotlinking ##

RewriteEngine On

RewriteCond %{HTTP_REFERER} ^http://(.+\.)?myspace\.com/

RewriteCond %{HTTP_REFERER} ^http://(.+\.)?friendfeed\.com/

RewriteCond %{HTTP_REFERER} ^http://(.+\.)?livejournal\.com/

RewriteRule .*\.(jpe?g|gif|bmp|png)$ – [F]

Это крайняя мера, которую стоит применять в случаях, когда имеются частые хотлинкеры .

«Сохранить как»

Если у вас блог или другой контентный сайт, определенные файлы будут провоцировать диалог “Save As” (сохранить как), вместо того, чтобы браузер их загружал. Этот код идеален для каталога ресурсов.

Целесообразнее выбрать определенный подкаталог для кода.

## Force a file to download with a “Save As” ##

AddType application/octet-stream .doc .mov .avi .pdf .xls .mp4

Перенаправить всех, c сохранением IP

Этот способ удобен во время внеплановых работ по технической части.

## Redirect Everyone but Selected IP Address ##

ErrorDocument 403 http://www.myoldsite.com

Order deny,allow

Allow from 111.111.111.111

Понадобится изменить ваш собственный IP-адрес (скопировать линию для каждого IP сотрудников), и отключить это, когда все будет готово.

Выборочная блокировка IP

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

Также вы можете с помощью этого сайта сгенерировать код блокировки любых IP:

## Block IP Address ##

order allow,deny

deny from 127.0.0.1

deny from 127.0.0.2

deny from 127.0.0.3

Раздел 2: перенаправления и перепись

Htaccess позволяет переписать и изменить URL, заменить автоматически созданные ссылки.

Перенаправление с http:// на www

Это старая проблема - добиться, чтобы сайт индексировался и в http://mydomain.com, и в www.mydomain.com.

Иногда бывает так, что сайт индексируется дважды, что не совсем хорошо в плане SEO.

Данная часть кода превратит любой запрос для версии http в www.

## Redirect non-www to the www version ##

RewriteCond %{HTTP_HOST} ^example.com

RewriteRule ^(.*)$ http://www.example.com/$1

Измените example.com на своей домен.

Перенаправление файла индекса (Index File) в корневой каталог

Еще одна проблема двойной индексации: поисковики индексируют и

www.example.com/ и www.example.com/index.php.

С помощью этого простого сниппета кода можно добиться, чтобы запросы файла переправлялись в корневой каталог.

## Redirect index to root ##

RewriteCond %{THE_REQUEST} ^{3,9}\ /.*index\.html\ HTTP/

RewriteRule ^(.*)index\.html$ /$1

В этом коде нужно изменить и название файла индекса (в 99% случаев это просто индекс), и расширение (обычно html, htm or php).

Перенаправление всех страниц на SSL

Способ обезопасить подразделы сайта. Этот код подходит не для всех случаев. Все, что в папке и ниже, переместится в https, но это не совсем подходящий вариант для корневого каталога htaccess.

Еще понадобится сертификат безопасности и настройки сервера.

RewriteCond %{REMOTE_HOST} !^111\.11\.11\.11

RewriteCond %{REQUEST_URI} !^/downtime\.html$

RewriteRule ^(.*)$ /downtime.html

## Redirect all Pages to Secure ##

RewriteCond %{HTTPS} !on

RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

Стандартное перенаправление 301

Перенаправление 301 сообщает Google и браузерам, что запрашиваемая страница перемещена в другое место.

Такой способ подходит, когда вы хотите удалить страницы сайта, или изменить названия ссылок, - так наносится минимальный ущерб продвижению.

Это намного лучше в сравнении со страницей 404, так, по крайней мере, внешние ссылки будут попадать на рабочие страницы.

## Standard 301 Redirect for Permanent Changes ##

redirect 301 /old-page.html http://www.example.com/newpage.html

Нужно изменить только две ссылки: первая - это старая страница, связанная с htaccess (обычно в корне), и вторая - полная ссылка на новую локацию. У вас может быть столько линий, сколько вы хотите перенаправить, но не стоит перенаправлять один и тот же url несколько раз.

Для больших сайтов перенаправления целесообразнее группировать по дате - так проще. Помните, что можно добавить # и превратить линию в комментарий.

Стандартное перенаправление (301) - подкаталог

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

Есть два способа сделать это:

## Redirect for a Directory – Preserves Request ##

Первый - сохраняет запрашиваемый файл. Если кто-то запрашивает mysite.com/blog/example.html - последует перенаправление на mystie.com/example.html.

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

Лучше убедиться, что новые файлы присутствуют, в противном случае появится 404.

Второй способ перенаправления используется, когда вы удалили подкаталог и хотите проверить, что не растеряли всех пользователей или ссылки, которые идут на старый подкаталог, и перенаправить их на обновленную страницу.

## Redirect a Directory – Does not preserve Request ##

RedirectMatch 301 ^/old-folder(.*)$ http://www.example.com/new-page.php

Опять же, кастомизировать эти коды очень просто. Нужно лишь вписать старый каталог и новые локации . Если хотите перенаправить на новый подкаталог, просто измените окончание url, чтобы там был подкаталог, но проверьте, что вы оставили $1 в первом примере.

302

Разница между пренаправлениями 301 и 302 в том, как их фиксируют поисковые роботы. Google вряд ли обновит свой индекс для 302, но для 301 это очень даже вероятно. 302 стоит использовать только тогда, когда изменения временные и вы хотите, чтобы Google их игнорировал. Чтобы превратить перенаправление в 302, просто измените цифру в начале. Это работает применительно ко всем сниппетам кодов перенаправления, где используется 301.

## Standard 302 Redirect for Temporary Changes ##

redirect 302 /old-page.html http://www.example.com/newpage.html

Изменение типа запросов файлов

Иногда нужно изменить типы файлов, для лучшего сжатия изображений, или для специального дополнения с php; htaccess справится со всем этим.

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

## Code to make all HTML requests become PHP requests ##

RedirectMatch 301 (.*)\.html$ http://www.example.com$1.php

Для кастомизации вы можете заменить типы файлов, в данном случае html - старый тип, а php - новый.

Перенаправьте все подкаталоги, за исключением корневого каталога

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

## Redirect an Entire Domain – Preserve Request ##

RewriteRule (.*) http://www.newdomain.com/$1

## Redirect all Subfolders to New Domain but Keep Root Intact ##

RewriteRule ^([^/]+)\/(.*)$ http://www.example.com/$1/$2/$3

Перенаправление всего домена

Иногда возникает ситуация, когда нужен новый домен, но нужно и сохранить все, что было сделано по части SEO для старого домена.

У вас должен быть Google Webmaster Tools, установленный на старом домене, затем вы сможете сообщать Google, что перемещаете домены.

Есть два способа: с сохранением запросов и без. Если у нового домена будет такой же сайт и столько же страниц и ресурсов, тогда лучше сохранить запросы. Другими словами, пользователь, запрашивающий /best-page.html на старом сайте, увидит best-page.html на новом.

Вы можете сделать полное перенаправление домена без сохранения запросов.

По сути, нужно отдельно перенаправить разделы веб-сайта на соответствующие разделы нового сайта, но есть более простой способ.

## Redirect an Entire Domain – No Preservation ##

Redirect 301 / http://www.newdomain.com

Перепись динамического URL

Большинство динамических URL выглядят примерно так:

http://www.mysite.com/posts.php?category=widgets

Они состоят из домена, файла и строки запросов, которая, в свою очередь, состоит из двух частей : поля и значения.

Для оптимизации URL нужно убрать строку запросов и использовать ее для создания структурированного URL.

В первом случае сделаем URL, который заканчивается как статический файл, то есть превратим URL в http://www.mysite.com/posts-about-widgets.php

RewriteRule ^posts-about-([^/]+).php/?$ /posts.php?category=$1&foo=bar [L]

RewriteCond %{QUERY_STRING} category=([^/]+)

Задается маппинг старого URL на новом.

Здесь три линии; первая определяет место старого URL на новом, вторая - место 1-ой строки запросов, третья - точка остановки, чтобы избежать беспрерывного перенаправления.

Первая линия позволяет установить формат новой страницы, в нашем случае это http://www.mysite.com/posts-about-widgets.php.

Вы можете изменить первую часть URL.

В скобках в конце - поле значения строки запросов, которая сюда переносится. Так URL выглядит достаточно динамично, чтобы отображать отношения с базой данных.

В этом примере - посты из категории виджетов, поэтому нужны соответствующие ключевые слова в URL.

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

Третья выделенная часть содержит оригинальный URL и строку запросов. Включено только поле, значение переносится как переменная.

Теперь у нас новая страница, но, вероятнее всего, система все еще будет генерировать старые ( уродливые) URL, поэтому нужно перенаправить людей на новую страницу. Для этого понадобится правило переписи/замены Rewrite Rule , которое заменяет запросы для строки запросов в новом ярком URL:

RewriteRule ^posts\.php$ /posts-about-%1.php?

Относительно просто, не так ли? Нужно только поместить ваш старый URL в первую часть, ваш новый URL - во вторую часть. И вуа-ля! Динамическое перенаправление на новую страницу со старой переменной готово!

Совместим части кода. Мы заменили пример с текстом для вставки, чтобы запомнить части, к которым относится каждое утверждение (statement).

Возможно, вы захотите перейти к новому типу URL, возможно, вернуться обратно, к странице http://www.mysite.com/posts/widgets instead of that .php. Это также возможно, нужно лишь немного изменить код.

## Rewrite Dynamic URL to A Static Page ##

RewriteRule ^new-page-([^/]+).php/?$ /old.php?field=$1&foo=bar [L]

RewriteCond %{QUERY_STRING} !foo=bar

RewriteRule ^old\.php$ /new-page-%1.php?

## Rewrite Dynamic URL to A Static SubFodler ##

RewriteRule ^new-folder/([^/]+)/?$ /old.php?field=$1&foo=bar [L]

RewriteCond %{QUERY_STRING} field=([^/]+)

RewriteCond %{QUERY_STRING} !foo=bar

RewriteRule ^old\.php$ /new-folder/%1/?

Здесь все так, как и прежде, но в данном случае мы назвали первый подкаталог вручную и позволили полю стать вторым подкаталогом.

Раздел 3: скорость и тонкая настройка

Последний раздел этого руководства посвящен тонкой настройке, которая позволяет и производительность сайта. Многие из этих сниппетов кода зависят от активности отдельных модулей или разрешений, это значит, что разные серверы и хосты могут вести себя по-разному.

GZIP compression

GZIP compression - серверная функция, которая уменьшает вес веб-страниц и скриптов прежде, чем они отправляются в браузер.

Прежде эта технология была довольно несовершенной, в особенности в безопасных разделах и платежных шлюзах. Сейчас все на порядок лучше. Большая часть браузеров (даже старых) принимает GZIP.

Есть несколько вариантов активировать GZIP. Не нужно изменять код - просто скопируйте и вставьте.

На этом сайте можно проверить, активирован ли GZIP на вашем ресурсе, и сколько времени/места сэкономлено.

Вот четыре способа, выберите один из них:

## Enable GZIP Version 1 ##

php_value output_handler ob_gzhandler

css_value output_handler ob_gzhandler

js_value output_handler ob_gzhandler

##ENABLE GZIP Version 2##

mod_gzip_dechunk Yes

mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$

mod_gzip_item_include handler ^cgi-script$

mod_gzip_item_include mime ^text\.*

mod_gzip_item_include mime ^application/x-javascript.*

mod_gzip_item_exclude mime ^image\.*

mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*

##Enable GZIP Version 3##

SetOutputFilter DEFLATE

SetOutputFilter DEFLATE

SetOutputFilter DEFLATE

SetOutputFilter DEFLATE

##Enable GZIP Version 4##

AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript

BrowserMatch ^Mozilla/4 gzip-only-text/html

BrowserMatch ^Mozilla/4.0 no-gzip

BrowserMatch bMSIE !no-gzip !gzip-only-text/html

Активация кэширования

Кэширование позволяет постоянным посетителям не загружать повторно каждый элемент сайта. Если у вас WordPress, тогда можно взять несколько плагинов, например WP Hyper Cache.

Если у вас статический сайт, htaccess дает возможность применить кэширование. Стоит все перепроверить. Если у вас нестандартная CMS, или какой-либо динамический контент, ошибки с кэшированием могут привести к тому, что сайт перестанет обновляться. Поэтому стоит консультироваться с разработчиками.

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

У кода, размещенного ниже, другие настройки кэширования для разных типов файлов. Вы также всегда можете отключить этот код.

## Enable Caching ##

## Files to Cache for One Month ##

Header set Cache-Control “max-age=2592000”

## Files to Cache for One Week ##

Header set Cache-Control “max-age=604800”

## Files to Cache for One Day ##

Header set Cache-Control “max-age=43200”

## Disable cache for script files ##

Header unset Cache-Control

GZIP и кэширование существенно улучшают производительность сайта.

Минимизация 404 за счет проверки грамматических ошибок

Check Spelling - это модуль сервера Linux Server Module. Check Spelling проверяет сервер на предмет наличия подобных URL.

К примеру, пользователь допускает ошибку, вписывая в браузер такой адрес:

http://www.mysite.com/caje/red.html

Но на самом деле он/она хотел написать:

http://www.mysite.com/cake/red.html

Check Spelling фиксирует такую незначительную ошибку и исправляет ее (если, конечно, не существует caje/red.html). Также учитывается состояние регистра строчных и прописных символов в URL.

##Make Linux correct case sensitive urls/slight typos in urls##