Правильное оформление файла .htaccess | Redirect, RewriteRule, 404

schwebpes
На сайте с 08.02.2011
Offline
10
14471

Файл .htaccess служит для управления некоторыми функциями сервера Apache. Все изменения в нём производятся с помощью внесения определённых записей в любом текстовом редакторе (блокнот, Dreamweaver и пр. Не путать с текстПроцессорами, типа MSWord).

Внимательно! В проводнике Windows будет невозможно создать файл с таким именем (т.е. без имени, только с расширением). Его необходимо будет создать в альтернативной программе (например Far Manager) или скопировать готовым откуда угодно и отредактировать.

Файл помещается непосредственно в корневую директорию сайта на сервере. Его правила распространяются на данную директорию и все поддиректории, находящиеся в ней.

1. Правила переадресации страниц. Redirect.

Выполняется для указания клиенту (браузеру, поисковому роботу), что данная страница навсегда (если redirect 301) или временно (если redirect 302) переехала по другому адресу.

Записывается:

Redirect 301 /filename.html http://domain.tld/newfilename.php

где /filename.html - старое название страницы (записывается без указания протокола и домена, от корня сайта.) http://domain.tld/newfilename.php - новое имя той же страницы. (записывается с указанием протокола и домена. Домен может быть как тот же, так и любой другой).

Запись вида:

Redirect 301 / http://domain.tld/

Будет означать, что все страницы сайта с верхнего уровня перенесены на новый сайт domain.tld (на главную страницу!)

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

Записывается:

RedirectMatch permanent ^(.*)$ http://domain.tld$1

где ^(.*)$ - страница, которую нужно перенести с данного домена. (^ - начало "сравниваемой" строки, (.*) - любое количество любых символов, $ - конец сравниваемой строки), http://domain.tld - домен на который был перемещён сайт, $1 - выражение в скобках.

2. Правила подмены строк. RewriteRule.

Используется для замены для сервера адресной строки на необходимую ему (например, передача GET-параметров в адресе страницы)

Записывается:


RewriteEngine on
RewriteRule ^(.+)\/$ index.php?file=$1
RewriteRule ^(.+)\/(.+)\.html$ index.php?file=$1&page=$2

Где RewriteEngine on - включение модуля Rewrite, ^(.+)\/$ - исходная строка, адрес в браузере (^ - начало строки, (.+) - два или более любых символа - можно написать и (.*), \/ - экранированный символ "/"), index.php - файл-скрипт, который должен быть запущен, ?file=$1 - параметр, который должен быть передан ($1 - выражение в первых скобках).

Чтобы было понятнее - поясню "на пальцах".

Строка RewriteRule ^(.+)\/(.+)\.html$ index.php?file=$1&page=$2 означает:

Адрес вида

http://domain.tld/filename/pagename.html

сервер воспримет как

http://domain.tld/index.php?file=filename&page=pagename

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

Запись вида:


RewriteEngine on
RewriteRule ^(.+)\/$ index.php?file=$1 [R=301, L]

будет совершать подмену не только для сервера, но уже и для клиента. Т.е. - это аналог директивы Redirect 301. "L" - будет означать, что это правило выполняется последним в файле .htaccess

3. Обработка ошибки 404.

Позволяет выдавать одну определённую страницу вместо отсутствующих и вместо ошибки 404.

Записывается:

ErrorDocument 404 /404.php

где 404.php - страница, которая загружается вместо отсутствующей.

"Профессиональные Комплексные Решения" (http://prcs.ru) - IT-директор Использую СеоПульт (http://seopult.ru/ref.php?ref=820be88242cc323a)
K
На сайте с 31.01.2001
Offline
737
#1
schwebpes:
3. Обработка ошибки 404.
Позволяет выдавать одну определённую страницу вместо отсутствующих и вместо ошибки 404.
Записывается:

ErrorDocument 404 http://domain.tld/404.php

Если я правильно помню, такая конструкция всегда выдавала редирект на указанный URL. А чтобы выдавать 404, нужно писать

ErrorDocument 404 /404.php

Тогда редиректа не будет.

P.S. Не поленился, проверил, факт - редирект 302 вместо корректной обработки ошибки 404. Рановато вам еще мануалы писать, гражданин "IT-директор".

Что вы там поправили? Какие еще "или" ? Зачем писать заведомо вредные конструкции, ведущие к некорректной обработке ошибки 404?

Колитесь, где взяли инфу?

P.P.S. Сделать файл .htaccess:

echo >.htaccess

Выделенные полосы в Москве (http://www.probkovorot.info) привели к снижению скорости до 23%.
innov
На сайте с 12.07.2007
Offline
100
#2
schwebpes:

Внимательно! В Windows будет невозможно создать файл с таким именем (т.е. без имени, только с расширением). Его необходимо будет скопировать готовым откуда угодно и отредактировать.
Файл помещается непосредственно в корневую директорию сайта на сервере. Его правила распространяются на данную директорию и все поддиректории, находящиеся в ней.

В far'е под windows вполне можно. Не путайте возможности винды и ограничения проводника.

Может... пора попробовать торговать на Forex? (http://alpari.ru/?partner_id=1230048) Размещение Ваших статей и новостей в СМИ (/ru/forum/659375) Настоящий (Одна штука) Белый Каталог сайтов по Москве и Нижнему Новгороду (/ru/forum/comment/14415061)
schwebpes
На сайте с 08.02.2011
Offline
10
#3

Да, всё верно. Подправил.

Учёл все комментарии и подправил ещё раз. Kost, innov, спасибо.

Kost-у - отдельное, за выражение лояльности в виде (-)репы!!!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий