.htaccess (с точкой в начале имени) - это файл-конфигуратор Apache-серверов, который дает возможность конфигурировать работу сервера в отдельных директориях (папках), не предоставляя доступа к главному конфигурационному файлу. Например, устанавливать права доступа к файлам в директории, менять названия индексных файлов, самостоятельно обрабатывать ошибки Apache, перенаправляя посетителей на специальные страницы ошибок. .htaccess представляет собой обычный текстовый документ, расширение которого htaccess. Данный файл обычно находится в корне сайта, однако Вы можете создавать и дополнительные .htaccess-файлы для различных директорий Вашего сайта.
Mod_rewrite - модуль, используемый веб-серверами для преобразования URL'ов.
Директивы модуля Mod_rewrite
- RewriteBase
- RewriteCond
- RewriteEngine
- RewriteLock
- RewriteLog
- RewriteLogLevel
- RewriteMap
- RewriteOptions
- RewriteRule
Внимание! Перед тем как Вы будете вносить изменения выполните резервное копирование баз вашего сайта.
Варианты реализации Редиректа с помощью файла .htaccess
- Простой редирект:
Redirect 301 / http://www.domainname.ru/
илиredirect /secret http://www.site.ru/nosecret
Ставится в файле .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 [R=permanent,L]
- Редирект с регулярным выражением:
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 [L,R=301]
- Редирект всей папки кроме одного файла
В следующем примере все файлы из папки /superdiscount будут редиректится на на файл /hot-offers.php, КРОМЕ файла /superdiscount/my-ebook.html котоый должен редиректится на /hot-to-make-million.htmlRewriteRule ^superdiscount/my-ebook.html /hot-to-make-million.html [L,R=301] RewriteRule ^superdiscount(.*)$ /hot-offers.php [L,R=301]
- Редирект динамического URL на новый файл.
Данный вариант пригодится если вы хотите редиректить динамический URL с параметрами на новый статический файл.RewriteRule ^article.jsp?id=(.*)$ /latestnews.htm [L,R=301]
То есть теперь, запрос к файлу вида http://www.kass.ws/article.jsp?id=8632 и/или http://www.kass.ws/article.jsp?id=1245 будет отправлен на файл http://www.kass.ws/latestnews.htm.
Редиректы в зависимости от времени
Когда нужно применять уловки типа содержания зависящего от времени масса вебмастеров все ещё используют CGI скрипты которые производят редиректы на специальные страницы. Как это может быть сделано через mod_rewrite?
Есть много переменных названных TIME_xxx для условий редиректа. В связке со специальными лексикографическими образцами для сравнения <STRING, >STRING и =STRING мы можем производить редиректы зависящие от времени:RewriteEngine on RewriteCond %{TIME_HOUR}%{TIME_MIN} >0700 RewriteCond %{TIME_HOUR}%{TIME_MIN} <1900 RewriteRule ^foo\.html$ foo.day.html RewriteRule ^foo\.html$ foo.night.html
Это выдает содержимое foo.day.html при запросе URL foo.html с 07:00 до 19:00 а в оставшееся время содержимое foo.night.html.
- Убираем у всех запросов вначале "WWW."
RewriteEngine on # оглашаем, что хотим использовать mod_rewrite RewriteCond %{HTTP_HOST} ^www\.(.*) [NC] RewriteRule ^/?(.*) http://%1/$1 [L,R=permanent]
- Меняем расширение .html на .php
Иногда бывает так, что у Вас статичный веб-сайт, а Вам необходимо, чтобы на нем срабатывал какой-нибудь php-скрипт. Для этого Вам необходимо сказать серверу, чтобы он обрабатывал эту страницу как php-файл.AddHandler application/x-httpd-php .html
Этот прием можно использовать и для других расширений файлов:AddHandler application/x-httpd-php .xml AddHandler application/x-httpd-php .asp
Данный материал взят с сайта www.sdaprel.ru
Комментарии
RSS лента комментариев этой записи