Файл .htaccess: настройка, редирект, где находится, примеры использования

Файл .htaccess: настройка, редирект, где находится, примеры использования

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

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

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

Возможности и для чего нужен

В данном файле сайтостроители могут:

  • Настраивать директивы простого перенаправления (редиректы). Это позволит после смены домена отправить посетителя со страницы предыдущего сайта на новый проект.
  • Переадресовывать с URL, где есть www, на домен без www. Или же на https после того, как установите ssl сертификат.
  • Описывать ошибки. В их числе и ошибка 404 с заменой на необходимую страницу.
  • Кэширование файлов. Делается с целью ускорения работы веб-ресурса.
  • Создавать ЧПУ. Это «Человеко-понятные УРЛы», то есть, формируются ссылки, понятные для интернет-пользователей.
  • Изменять исходный код страниц.
  • Управлять доступом к файлам и директориям при помощи паролей.
  • Задавать индексный файл.
  • Открывать и закрывать доступ с определенных IP-адресов.
  • Управлять поисковыми ботами на сайте.
  • Настраивать директивы сложного направления.

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

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

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

htaccess, позволяющий менять некоторые директивы в главном файле.

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

Где находится .htaccess

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

Да, мы все привыкли видеть файлы с названием из слова, и расширением после точки, которое состоит всего из 2-3 букв. Но пустые названия позволяют делать файлы и папки «скрытыми», с открытым исходным кодом. Из этого следует вывод, что .

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

Но есть у этого метода «скрытия» файла и обратная сторона медали. В стандартных FTP-клиентах на ОС Windows и Mac, документ очень часто остается невидимым для пользователей, из-за чего они ошибочно полагают, что его просто нет.

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

Хорошо, что большинство хостингов оставляют место на диске, где htaccess-файл уже установлен автоматически.

Файл .htaccess: настройка, редирект, где находится, примеры использования

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

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

Как правильно создать .htaccess

Для этого вам понадобится самый обычный текстовый редактор, к примеру, Блокнот, который есть на любом ПК:

  1. Откройте Блокнот, ничего в нем не пишите.
  2. Выберите пункт «Файл» и нажмите «Сохранить как».
  3. Появится окно, где напротив пункта «Тип файла» выберите «All types» или «Все файлы».
  4. В строке «Имя файла» введите .htaccess и кликните на «Сохранить».

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

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

Примеры использования

Рассмотрим самые популярные команды для .htaccess.

Редирект

Эти директивы используются с завидной регулярностью. Они позволяют перенаправить посетителя со старого URL на новую страницу. Это возможно благодаря 301-редиректу. Достаточно в код файла вписать:

Redirect 301 /старый_URL.html http://www.название_вашего_сайта.ru/новый_URL.html

В целом директива будет отображена в таком виде:

Redirect [status] URL_LOCAL URL_REDIRECT

  • URL_LOCAL – это старый адрес, с которого осуществляется перенос пользователя.
  • URL_REDIRECT – новый URL, куда переносится страница.
  • В поле [status] могут быть следующие значения:
  1. 301 – страница перенесена навсегда.
  2. 302 – страница перенесена на время.
  3. 303 – смотрите другую страницу.
  4. 410 – страница удалена.

Mod_rewrite (директивы сложного переноса)

Этот модуль содержится в Apache. В нем есть изобилие самых разных директив для расширенного управления адресами. К основным из них относятся:

1. Указание основного зеркала

Предназначен для того, чтобы преобразовать домен с www на URL без www. Достаточно ввести правило:

RewriteEngine On # включает работу
RewriteCond %{HTTP_HOST} ^www.название_вашего_сайта
u$ [NC] #условия для начала перенаправления
RewriteRule ^( *)$ http://название_вашего_сайта_/$1 [R=301,L] #правило преобразования

2. Перенос на https

Файл htaccess — настройка и примеры использования

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

Файл .htaccess: настройка, редирект, где находится, примеры использования

Чаще всего его применяют для создания 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 для настройки сайта.

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

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

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

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

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

Читайте также:  Что такое Cron: как использовать планировщик задач

Пример:

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$ [NC]
RewriteRule ^(.*)$ http://vash-sait.ru/$1 [R=301,L]

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 [R=302,L]

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

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

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

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

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

RewriteRule .(jpg|png|gif)$ http://vash-sait.ru/images/imageinfo.jpg [NC,R,L]

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}/ [R=301,L]

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

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

RewriteEngine on
RewriteCond %{HTTP_REFERER} zapretnui-sait.com [NC,OR]
RewriteCond %{HTTP_REFERER} zapretnui-sait.com [NC,OR]
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-файл.

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

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

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

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

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

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

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

order allow deny
deny from all
allow from 192.112.12.198

Для этого используются директивы order (далее указывается порядок выполнения директив), deny (директива, с помощью которой запрещается всем и ко всему), allow (директива, за которой следует IP-адрес, попадающий в список исключений и открывающий ему доступ к директивам и файлам). Стоит также отметить, что директивы deny и allow должны следовать именно в этом порядке, иначе действие директивы allow будет перекрыта директивой deny и не даст ожидаемого результата.

3. Запретить доступ с определенного IP

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

order allow deny
deny from all
deny from 192.112.12.198

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

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

deny from all

5. Ограничить доступ к определенному типу файлов

order allow,deny
deny from all

  1. 6. Запретить просмотр директории без индексных файлов
  2. Если в htaccess добавить сточку Options –Indexes, будет ограничена возможность просматривать каталоги, в которых нет индексных файлов.
  3. 7. Разрешить просматривать директорию
  4. Также можно разрешить просматривать определенные директории.
  5. Опции PHP
  6. 1. Заставить работать PHP скрипты в HTML файлах

RemoveHandler .php .htm .html
AddHandler application/x-httpd-php .php .htm .html

2. Заставить выполнять PHP в файлах JavaScript

AddType application/x-httpd-php .js
AddHandler x-httpd-php5 .js

SetHandler application/x-httpd-php

3. Ограничение размера загружаемого файла для PHP

php_value upload_max_filesize 20M

20M  — это ращмер файла в мегабайтах

4.  Изменить максимальный размер запроса для загрузки в PHP

php_value post_max_size 10M

5. Изменить время исполнения скрипта

php_value max_execution_time 30

30 — время исполнения скрипта в секундах.

6. Изменение времени на разбор введенных данных

php_value max_input_time 60

Рекомендуем ознакомиться:

Подробности

Файл htaccess — 47 наглядных примера редиректов, — Дмитрий Лео — Советы вебмастеру

синтаксис htaccess примеры редиректов

Читайте также:  Что такое PuTTY: правильная настройка, примеры использовния

В начало .htaccess ставят:

RewriteEngine On RewriteBase /

  • Первая строка включает обработку правил, вторая — обрезает полный путь (от корня сервера) до корня сайта. /home/papka-s-saitom/public_html/razdel/podrazdel/ — таким был путь до RewriteBase / /razdel/podrazdel/ — таким станет после
  • Благодаря «RewriteBase /» удобнее делать преобразования URI (убирается привязка к физическому расположению файлов сайта на сервере).
  • Давайте рассмотрим самые распространенные примеры:

1. Простой редирект

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

RewriteRule ^news/happy.* /news.html [R=301,L]

2. Реврайт без редиректа

Иногда требуется, чтобы был редирект без смены адреса, т.е. реврайт без редиректа. Для этого просто не указываем флаг редирект (R), и получаем желаемый результат, теперь по адресу news/happy получим news.html, а в адресной строке останется news/happy

RewriteRule ^news/happy.* /news.html [L]

3. Редирект с сохранением рейтинга страницы

Redirect 301 /old/old.php https://www.site.com/new.php

4. Редирект для домена с www.site.com на site.com

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

Убираем у всех запросов вначале «WWW.»

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

5. Редирект для домена с site.com на www.site.com

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

Другой вариант

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

6. Редирект с index.php (html,htm) на главную страницу

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.(php|html|htm) HTTP/ RewriteRule ^(.*)index.(php|html|htm)$ $1 [R=301,L]

7. Редирект с index.html на папку (удаление из строки браузера index.html)

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /.*index.html? HTTP/ RewriteRule ^(.*)index.html?$ https://www.site.com/$1 [R=301,L]

8. Заменить все .htm файлы на .html файлы

RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*).htm$ $1.html [R=301,L]

Другой вариант

RewriteRule ^(.*).htm$ $1.html [R=301]

9. Чтобы вместо page.htm загружался файл page.html

RewriteRule ^page.htm$ page.html [R=301]

10. Переезд с одного домена на другой

RewriteCond %{HTTP_HOST} site.com RewriteRule (.*) https://site.com/$1 [R=301,L]

11. Редирект всех файлов в папке на один файл

Например вы больше не нуждаетесь в разделе сайта «old» и хотите перенаправить все запросы к папке /old на один файл /new.php. Для этого добавляем в .htaccess следующий код.

RewriteRule ^old(.*)$ /new.php [L,R=301]

12. Задание типа индексной страницы (php, html, htm и другие)

Указывается порядок загрузки типов индексного файла, лежащих в корне каталога.

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

Проверяем доменное имя, если оно начинается с www, то сработает правило: «все, на https://%1/$1». Здесь %1 это наш домен без www (взят из условия), а $1 это адрес (взят из самого правила).

13. Убираем у всех запросов в конце index.php. Переадресуем на страницу без index.php

Поисковые системы плохо относятся к дубрям страниц. Чтобы этого избежать нужно удалить (склеить) страницы вида https://ваш_домен/ и https://ваш_домен/index.php

RewriteCond %{THE_REQUEST} ^.*/index.php RewriteRule ^(.*)index.php$ https://%{HTTP_HOST}/$1 [R=301,L]

14. Определение кодировки, в которой сервер «отдает» файлы

AddDefaultCharset windows-1251

Варианты: KOI8-R, UTF-8, Windows-1251

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

CharsetSourceEnc windows-1251

Варианты: KOI8-R, UTF-8, Windows-1251

16. Кэширование для всех типов файлов по времени доступа

ExpiresActive on ExpiresDefault «access plus 600 seconds»

17. Кэширование для всех типов файлов по времени изменения

ExpiresActive on ExpiresDefault «modification plus 600 seconds»

18. Кэширование для определённых типов файлов

ExpiresByType text/css «modification plus 600 seconds» ExpiresByType image/jpeg «modification plus 600 seconds» ExpiresByType image/gif «modification plus 600 seconds» ExpiresByType image/x-ico «modification plus 600 seconds» ExpiresByType image/png «modification plus 600 seconds»

19. Главная страница без дублирования

Обычно код главной страницы физически расположен в файле index.html или index.php, но сайт должен открываться по любому из запросов: site.com, site.com/index.html, www.site.com и www.site.com/index.html.

Но для поисковых систем это четыре разных URL! Если не настроить .htaccess верно, поисковик добавит в свой индекс четыре одинаковых страницы. Это признак некачественного сайта.

Избежать этой проблемы можно с помощью такого кода в .htaccess:

Options +FollowSymLinks RewriteEngine on RewriteCond %{HTTP_HOST} ^site.com RewriteRule (.*) https://www.site.com/$1 [R=301,L] RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.html HTTP/ RewriteRule ^index.html$ https://www.site.com/ [R=301,L]

20. Редирект страниц без слэша в конце URL на слеш

Чтобы предотвратить ситуацию с индексированием страниц www.site.com/about и www.site.com/about/ как разных, ставим следущий код: Со страниц без слэша будет установлен редирект на «слэшевые».

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

Другой вариант

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

21. Принудительная постановка замыкающего слеша

Следующий код всегда будет добавлять слеш в адрес URL вашего сайта, что хорошо помогает в области SEO сайта.

RewriteCond %{REQUEST_URI} /+[^.]+$ RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]

22. Удалить слеш в конце

RewriteCond %{HTTP_HOST} (.*) RewriteCond %{REQUEST_URI} /$ [NC] RewriteRule ^(.*)(/)$ $1 [L,R=301]

23. Удаляем «category» из URL

Для изменения ссылки site.com/category/blue на site.com/blue, просто добавьте следующий код в конце вашего .htaccess файла.

RewriteRule ^category/(.+)$ https://www.site.com/$1 [R=301,L]

24. Редирект URL страницы с папки в корень сайта

Например страница лежит на сервере в site.com/category/blue.html, но надо чтобы страница работала по запросу site.com/blue.html

RewriteCond %{DOCUMENT_ROOT}/category/$1 -f RewriteRule ^(.*)$ category/$1 [L,QSA]

25. Редирект от GET параметров

Например, нужно что бы со страницы /?action=page&id=15 был редирект на /page/15/

RewriteCond %{QUERY_STRING} action=page [NC] RewriteCond %{QUERY_STRING} id=(d+) [NC] RewriteRule .* /page/%1/? [R=301,L]

26. Редирект на мобильную версию сайта

Допустим, что мобильная версия расположена на поддомене m.site.com. Будем переходить на мобильную версию только с главной страницы основного домена.

RewriteCond %{HTTP_USER_AGENT} (?i:midp|samsung|nokia|j2me|avant|docomo|novarra|palmos|palmsource|opwv|chtml|pda|mmp|blackberry|mib|symbian|wireless|nokia|hand|mobi|phone|cdm|upb|audio|SIE|SEC|samsung|HTC|mot-|mitsu|sagem|sony|alcatel|lg|eric|vx|NEC|philips|mmm|xx|panasonic|sharp|wap|sch|rover|pocket|benq|java|pt|pg|vox|amoi|bird|compal|kg|voda|sany|kdd|dbt|sendo|sgh|gradi|jb|dddi|moto|iphone|android) [NC] RewriteCond %{HTTP_HOST} site.com RewriteRule ^$ https://m.site.com/ [R=302,L]

Первой строкой мы проверяем USER_AGENT, определяем что он относится к мобильникам. (эту строку я детально не проверял, взял на просторе интернета, возможно она не совсем корректная, или есть более универсальная строка. Но на моих мобильных устройствах этот пример работает)

Второй строкой проверяем что мы находимся на нужном домене (т.к. пример не универсальный)

Третьей строкой, мы проверяем, что находимся на главной страницы (без всяких параметров и прочего) и перенаправляем на поддомен.

27. Редирект на мобильную версию сайта (Универсальная версия)

RewriteCond %{HTTP_HOST} ^(.

*)$ [NC] RewriteCond %{HTTP_USER_AGENT} (?i:midp|samsung|nokia|j2me|avant|docomo|novarra|palmos|palmsource|opwv|chtml|pda|mmp|blackberry|mib|symbian|wireless|nokia|hand|mobi|phone|cdm|upb|audio|SIE|SEC|samsung|HTC|mot-|mitsu|sagem|sony|alcatel|lg|eric|vx|NEC|philips|mmm|xx|panasonic|sharp|wap|sch|rover|pocket|benq|java|pt|pg|vox|amoi|bird|compal|kg|voda|sany|kdd|dbt|sendo|sgh|gradi|jb|dddi|moto|iphone|android) [NC] RewriteRule ^$ https://m.%1 [R=302,L]

28. Обработка ошибок Apache

ErrorDocument 401 /401.html ErrorDocument 403 /403.html ErrorDocument 404 /404.html ErrorDocument 500 /500.html

29. Сохранение (загрузка) файлов вместо открытия

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

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

30. Переадресация с www.site.com/index.php?idc=4&marea=6 на www.site.com/

RewriteCond %{QUERY_STRING} ^idc=4&marea=6$ [NC]RewriteRule ^index.php$ /? [R=301,L]

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

RewriteCond %{HTTP_HOST} ^test.site.com$ [NC] RewriteRule ^(.*)$ https://site.com%{REQUEST_URI} [R=301,NC,L,QSA]

32. Изменяем переменные php и передаём обработку другому скрипту.

RewriteCond %{QUERY_STRING} ^parameter=(.+)$ RewriteRule (.*) parameter.php?%1 [L]

В этом примере запрос вида: index.php?parameter=some преобразуется в: parameter.php?some

33. Убираем переменные php из запроса

(вырезаем из URI всё, что находится после знака вопроса)

RewriteRule (.*) $1? [R=301,L]

34. Заперт входа на сайт

Запрещаем вход на сайт Интернет Експлореру (вернее, кто себя так определяет) и пользователям с определённого IP-адреса (xxx.xxx.xxx.xxx).

RewriteCond %{HTTP_USER_AGENT} MSIE RewriteCond %{REMOTE_ADDR} ^xxx.xxx.xxx.xxx$ RewriteRule ^.*$ — [F]

35. Закрываем от всех

deny from all

36. Закрываем конкретный файл от всех

deny from all

37. Разрешаем доступ только с одного ip

order deny,allow

deny from all

allow from 192.111.37.125

38. Запрещаем доступ с конкретных ip

order allow,deny

allow from all

deny from 192.111.35.122

deny from 192.111.37.171

39. Убираем из Урла (URL) расширение файла

RewriteCond %{REQUEST_FILENAME} ! RewriteCond %{REQUEST_FILENAME}.html RewriteRule ^(.*)$ $1.php

php можно заменить другим расширением. Например: html, htm, shtml, asp

40. При запросе файла .htaccess говорим, что он не существует (410, GONE)

RewriteRule ^/.htaccess$ — [G]

Другой метод

RewriteRule ^/.htaccess$ — [F]

41. Запрещаем отображать содержимое директории, если нет индексного файла

Вы скорее всего хоть раз видели текст Index of и список файлов. Так происходит в том случае, когда в директории нет индексного файла (например index.php), а система предлагает выбрать файл для дальнейшего открытия. Минус этого заключается в том, что случайный пользователь может увидеть список и содержание всех файлов директории.

Options -Indexes

42. Перенаправление с HTTPS на http

RewriteCond %{HTTPS} on RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI}

43. Редиректы в зависимости от времени

Когда нужно применять уловки типа содержания зависящего от времени масса вебмастеров все ещё используют CGI скрипты которые производят редиректы на специальные страницы. Как это может быть сделано через mod_rewrite?

Есть много переменных названных TIME_xxx для условий редиректа. В связке со специальными лексикографическими образцами для сравнения STRING и =STRING мы можем производить редиректы зависящие от времени: RewriteCond %{TIME_HOUR}%{TIME_MIN} >0700 RewriteCond %{TIME_HOUR}%{TIME_MIN}

Теперь все запросы к вашим старым URL-ам будут вызывать redirectold.php, который найдет новый URL и вернет 301 ответ с вашей новой ссылкой.

47. Красивый листинг каталогов

# ENABLE INDEXING Options +Indexes

  1. # INDEX OPTIONS IndexOptions +Charset=UTF-8 +FancyIndexing +IgnoreCase +FoldersFirst +XHTML +HTMLTable +SuppressRules +SuppressDescription +NameWidth=* +IconsAreLinks
  2. # META VIEWPORT IndexHeadInsert «»
  3. # HIDE /listing DIRECTORY IndexIgnore .htaccess /listing
  4. # GENERAL ICONS (BLANK, DIRECTORY, PARENT DIRECTORY)

AddIcon /data/listing/icons/blank.png ^^BLANKICON^^ AddIcon /data/listing/icons/folder.png ^^DIRECTORY^^ AddIcon /data/listing/icons/folder-home.png .. AddIconByType (TXT,/data/listing/icons/text.png) text/* AddIconByType (IMG,/data/listing/icons/image.

png) image/* AddIconByType (SND,/data/listing/icons/audio.png) audio/* AddIconByType (VID,/data/listing/icons/video.png) video/*

# EXTENSION SPECIFIC ICONS

Читайте также:  Что такое скрипт и для чего он нужен: что делают скрипты на сайте

AddIcon /data/listing/icons/archive.png .7z .bz2 .cab .gz .tar AddIcon /data/listing/icons/audio.png .aac .aif .aifc .aiff .ape .au .flac .iff .m4a .mid .mp3 .mpa .ra .wav .wma .f4a .f4b .oga .ogg .xm .it .s3m .mod AddIcon /data/listing/icons/bin.png .bin .hex AddIcon /data/listing/icons/bmp.png .bmp AddIcon /data/listing/icons/c.png .

c AddIcon /data/listing/icons/calc.png .xlsx .xlsm .xltx .xltm .xlam .xlr .xls .csv AddIcon /data/listing/icons/cd.png .iso AddIcon /data/listing/icons/cpp.png .cpp AddIcon /data/listing/icons/css.png .css .sass .scss AddIcon /data/listing/icons/deb.png .deb AddIcon /data/listing/icons/doc.png .doc .docx .docm .dot .dotx .dotm .log .msg .odt .pages .rtf .tex .

wpd .wps AddIcon /data/listing/icons/draw.png .svg .svgz AddIcon /data/listing/icons/eps.png .ai .eps AddIcon /data/listing/icons/exe.png .exe AddIcon /data/listing/icons/gif.png .gif AddIcon /data/listing/icons/h.png .h AddIcon /data/listing/icons/html.png .html .xhtml .shtml .htm .URL .url AddIcon /data/listing/icons/ico.png .

ico AddIcon /data/listing/icons/java.png .jar AddIcon /data/listing/icons/jpg.png .jpg .jpeg .jpe AddIcon /data/listing/icons/js.png .js .json AddIcon /data/listing/icons/markdown.png .md AddIcon /data/listing/icons/package.png .pkg .dmg AddIcon /data/listing/icons/pdf.png .pdf AddIcon /data/listing/icons/php.png .php .phtml AddIcon /data/listing/icons/playlist.

png .m3u .m3u8 .pls .pls8 AddIcon /data/listing/icons/png.png .png AddIcon /data/listing/icons/ps.png .ps AddIcon /data/listing/icons/psd.png .psd AddIcon /data/listing/icons/py.png .py AddIcon /data/listing/icons/rar.png .rar AddIcon /data/listing/icons/rb.png .rb AddIcon /data/listing/icons/rpm.png .rpm AddIcon /data/listing/icons/rss.png .

rss AddIcon /data/listing/icons/script.png .bat .cmd .sh AddIcon /data/listing/icons/sql.png .sql AddIcon /data/listing/icons/tiff.png .tiff .tif AddIcon /data/listing/icons/text.png .txt .nfo AddIcon /data/listing/icons/video.png .asf .asx .avi .flv .mkv .mov .mp4 .mpg .rm .srt .swf .vob .wmv .m4v .f4v .f4p .ogv AddIcon /data/listing/icons/xml.png .

xml AddIcon /data/listing/icons/zip.png .zip DefaultIcon /data/listing/icons/default.png

# listing FILES

HeaderName /data/listing/header.html ReadmeName /data/listing/footer.html IndexStyleSheet «/data/listing/style.css»

Пожертвования

Настройка файла htaccess

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

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

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

Синтаксис файла htaccess

Мы уже начали тему настройки Apache в одной из предыдущих статей, но сегодня немного освежим информацию и рассмотрим более детально именно настройку 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.

  1. Модификация URL в htacces выполняется с помощью трех директив, это RewriteBase, которая указывает префикс адреса, RewriteCond проверяет соответствие, и RewriteRule — изменяет URL в соответствии с регулярным выражением если все правила соответствия подходят.
  2. Сначала нужно включить Mod_Rewrite, на случай если модуль еще не активен:
  3. RewriteEngine on
  4. Укажем, что в качестве префикса для URL нужно использовать корень:
  5. RewriteBase /

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

RewriteRule index.html /index.php

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

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

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

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

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

RewriteEngine On;
RewriteBase /;

RewriteRule ^(.*).html$ $1.php

Директива 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

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

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

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

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

  • Таким же образом можно сделать переадресацию:
  • RewriteRule ^старый_адрес /новый_адрес/$1 [R=301,L]
  • Редирект с http версии на https:
  • RewriteCond %{SERVER_PORT} ^80$ [OR]
    RewriteCond %{HTTP} =on

RewriteRule ^(.*)$ https://site.ru/$1 [R=301,L]

Настройка страниц ошибок в 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.

  1. Сначала активируем модуль и устанавливаем период кэширования по умолчанию:
  2. ExpiresActive On
    ExpiresDefault «access plus 1 month»
  3. Теперь мы можем настроить кэширование для каждого mime типа файлов:
  4. ExpiresByType text/html «access plus 1 month 15 days 2 hours»
    ExpiresByType image/gif «access plus 5 hours 3 minutes»
  5. ExpiresByType image/x-icon «access plus 2592000 seconds»
  6. В первой строке мы указываем, что страницы 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:

Ссылка на основную публикацию