htaccess — настройка перенаправлений и управление конфигурацией веб-сервера. Файл.htaccess: что это такое, зачем он нужен, как правильно создать и настроить Использование htaccess

.htaccess (с точкой в начале имени) - это файл-конфигуратор Apache-серверов, который дает возможность конфигурировать работу сервера в отдельных директориях (папках), не предоставляя доступа к главному конфигурационному файлу (apache/conf/httpd.conf). Например, устанавливать права доступа к файлам в директории, менять названия индексных файлов, самостоятельно обрабатывать ошибки Apache, перенаправляя посетителей на специальные страницы ошибок. .htaccess представляет собой обычный текстовый документ, расширение которого htaccess. Данный файл обычно находится в корне сайта, однако Вы можете создавать и дополнительные.htaccess-файлы для различных директорий Вашего сайта.

Mod_rewrite - модуль, используемый веб-серверами для преобразования URL"ов.

Если вы хотите вести логи всех операций, выполненных с помощью mod_rewrite, можно активировать это с помощью следующей записи в httpd.conf:

RewriteLog /usr/local/apache/logs/mod_rewrite.log RewriteLogLevel 1

Директивы модуля Mod_rewrite Наиболее часто используемые параметры %{REQUEST_URI} Строка запроса (без доменного имени, и GET параметров), пример "/server/htaccess/"
%{HTTP_HOST} Доменное имя, например "max22.ru"
%{QUERY_STRING} Строка GET параметровВарианты реализации Редиректа с помощью файла.htaccess
  • Простой редирект:
    Redirect 301 / http://www.domainname.ru/ или redirect /secret http://www.site.ru/nosecret или # с использованием регулярного выражения RedirectMatch 301 .* http://www.site.ru/?.htaccess или httpd.conf для Apache. Первый "/" означает, что всё с верхнего уровня сайта, включая все подкаталоги, будет переадресовано (не забывайте поставить последний "/"). Если Вы хотите переадресовать только страницу, сохранив PR старой страницы, можно сделать так:

    Redirect 301 /old/old.htm http://www.you.ru/new.htm где:
    /old/old.htm - путь и имя старой страницы
    http://www.you.com/new.htm - новый путь и новое имя перемещенной страницы

  • Редирект на любую страницу по ip пользователя или при запросе конкретной страницы (а также по маске имени).
    Если у пользователя ip 192.152.37.125, то он будет перенаправлен на страницу user.php: SetEnvIf REMOTE_ADDR 192.152.37.125 REDIR="redir" RewriteCond %{REDIR} redir RewriteRule ^/$ /user.php
  • Редирект при запросе определённых файлов. Если запрашиваются файлы, расширение которых не указано в файле.htaccess (gif и jpg), то следует перенаправление: RewriteEngine On RewriteRule !.(gif|jpg)$ index.php
  • Использование mod_rewrite:
    Options +FollowSymLinks RewriteEngine on RewriteCond %{HTTP_HOST} ^yourdomain\.ru RewriteRule ^(.*)$ http://www.yourdomain.ru/$1
  • Редирект с регулярным выражением:
    RedirectMatch 301 (.*) http://www.yourdomain.ru$1 Прописывается в файле.htaccess. (.*) RedirectMatch фактически соответствует регулярным образцам выражения после доменного имени. Таким образом, нельзя выполнить соответствие образца на ^/yourdomain.ru. Однако, можно преобразовать страницы с использованием.html расширения к файлам того же самого названия, но с.php расширением: RedirectMatch 301 (.*)\.html$ http://www.yourdomain.ru$1.php Если необходимо сделать различное перенаправление для отдельных страниц, можно использовать следующее: RedirectMatch Permanent ^/html/resources.html$ http://www.newdomain.com/resources.php RedirectMatch Permanent ^/html/other_page.html$ http://www.newdomain.com/other_page.php RedirectMatch Permanent ^/(.*)$ http://www.newdomain.com/ "RedirectMatch Permanent " - это эквивалент "RedirectMatch 301", строка с "*(Wildcard)" должна быть последней в этом списке.
  • Создание удобо читаемых URL
    Чтобы преобразовать, например, www.site.ru/product.php?id=123 в www.site.ru/product/123 следующим образом: RewriteEngine on RewriteRule ^product/([^/\.]+)/?$ product.php?id=$1 [L] В следующем примере преобразуем www.site.ru/script.php?product=123 в www.site.ru/cat/product/123/: RewriteRule cat/(.*)/(.*)/$ /script.php?$1=$2
  • Редирект на PHP:
    header("HTTP/1.1 301 Moved Permanently"); header("Location: http://www.newdomain.ru/newdir/newpage.htm"); exit(); Естественно, надо создать страницу, при обращении к которой и будет происходить Редирект, и разместить её на сервере. И лучше укажите HTTP/1.1 (а не HTTP/1.0 или HTTP/0.9, которые не поддерживают виртуальный хостинг)
  • Редирект всех файлов в папке на один файл.
    Например вы больше не нуждаетесь в разделе сайта Super discount и хотите перенаправить все запросы к папке /superdiscount на один файл /hot-offers.php. Для этого добавляем в.htaccess следующий код. RewriteRule ^superdiscount(.*)$ /hot-offers.php
  • Редирект всей папки кроме одного файла
    В следующем примере все файлы из папки /superdiscount будут редиректится на на файл /hot-offers.php, КРОМЕ файла /superdiscount/my-ebook.html котоый должен редиректится на /hot-to-make-million.html RewriteRule ^superdiscount/my-ebook.html /hot-to-make-million.html RewriteRule ^superdiscount(.*)$ /hot-offers.php
  • Редирект динамического URL на новый файл.
    Данный вариант пригодится если вы хотите редиректить динамический URL с параметрами на новый статический файл. RewriteRule ^article.jsp?id=(.*)$ /latestnews.htm То есть теперь, запрос к файлу вида http://www.kass.ws/article.jsp?id=8632 и/или http://www.kass.ws/article.jsp?id=1245 будет отправлен на файл http://www.kass.ws/latestnews.htm.
  • Массовый редирект новых файлов.
    Тепепь перейдем к самому сложному моменту, когда вам надо редиректить массу URL-ов, например после смены вашей CMS. Тут сразу возникает ряд проблем. Во-первых, внесение всех изменившихся адресов в.htaccess файл займет очень много времени, да и само по себе занятие малоприятное. Во-вторых, слишком много записей в.htaccess файле будут тормозить Apache сервера. И в третьих, при внесении такого количества информации высока вероятность, что вы где то ошибетесь. По этому, самый лучший выход, это нанять програмиста который вам напишет динамический редирект.
    Нижеприведенный пример написан на PHP, но так же может быть выполнен на любом языке. Предположим вы перешли на новую систему ссылок на вашем сайте и все файлы оканчивающиеся на старый id должны быть средирекчены. Сначала создаем в базе таблицу, которая содержит старый id и новый URL для редиректа. old_id INT new_url VARCHAR (255) Далее пишем код который свяжет ваши старые id с новыми URL-ами
    После этого, добавляем следующую строчку в.htaccess: RewriteRule ^/product-(.*)_(+).php /redirectold.php?productid=$2 затем создаем PHP файл redirectold.php, который будет поддерживать 301 редирект:

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

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

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

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

  • Публикации по теме