Авторизация

htaccess редиректы

RewriteRule [первое выражение] [вротое выражение] [флаг]

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

Если в конце у RewriteRule стоит флаг [R] или [R=301] или [R=что-то ещё]. RewriteRule при совпадении адреса из первого выражения делает переадресацию на второе выражение и в адресной строке адрес изменяется на второе выражение

Если в конце у RewriteRule стоит флаг [L]. RewriteRule закончит выполнение тут же и не будет выполнять следующие, если оно совпадает адресу в адресной строке.



htaccess редирект с www на без www при помощи RewriteRule

# Rewrite to no www
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
RewriteRule .* http://%1/$0 [L,R=301]

Если надо (для поисковых систем) один сайт перенаправить на другой, с переадресацией внутренних страниц, при условии что это одинаковые сайты:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?old-site\.ru$
RewriteRule ^(.*)$ http://www.new-site.ru/$1 [R=301,L]

Перенаправление страниц и разделов при помощи RewriteRule

На этих примерах можно немного разобраться в перенаправлениях, и сделать своё перенаправление.

Частенько нужно перенаправить один url на другой, для этого можно воспользоваться следующим методом:

RewriteEngine On
# если нужно конкретную страницу
# /stati/vrstka_dlya_mobilnyh_ustrojtsv
# перенаправить на /stati/o_kontekstnoj_reklame
RewriteRule ^stati/vrstka_dlya_mobilnyh_ustrojtsv/$ /stati/o_kontekstnoj_reklame [L,R]

 

Реже, но тоже бывает нужно перенаправить один раздел на другой раздел:

RewriteEngine On
# если нужно раздел http://домен/stati/какая то страница 
# направить на http://домен/uslugi/какая то страница
RewriteRule ^stati/(.*) /uslugi/$1 [L,R]

 

Для примера: если надо перенаправить страницу или страницы с адресом vrstka_dlya_mobilnyh_ustrojtsv можно написать следующее:

RewriteEngine On
RewriteRule vrstka_dlya_mobilnyh_ustrojtsv/$ /stati/o_kontekstnoj_reklame [L,R]

Так же это выражение будет срабатывать в случаях со следующей ссылкой:

  • http://домен/vrstka_dlya_mobilnyh_ustrojtsv
  • http://домен/stati/vrstka_dlya_mobilnyh_ustrojtsv
  • http://домен/stati/razdel/vrstka_dlya_mobilnyh_ustrojtsv
  • http://домен/123123vrstka_dlya_mobilnyh_ustrojtsv

 

А если напишем так, то 4 вариант не будет срабатывать:

RewriteEngine On
RewriteRule ^(.*/)?(vrstka_dlya_mobilnyh_ustrojtsv)/$ /stati/o_kontekstnoj_reklame [L,R]

Передача параметров в ссылке и как сделать чпу

Например, есть ссылка:

  • http://домен/news/?page=1
  • http://домен/news/?page=2

Чтобы сделать так: http://домен/news/1 или http://домен/news/2, пишем:

RewriteEngine On
RewriteRule news/(.*)/ news/?page=$1 [L]

Если нужно переадресовать адрес news на news.php

Чтобы передать запрос php файлу и как то его обработать например:

  • http://домен/news/novost_odin
  • http://домен/news/?page=2
  • http://домен/news/novost_odin/?page=5

, пишем:

 

RewriteEngine On
RewriteCond %{QUERY_STRING} page=([0-9]+)
RewriteRule ^news/(.*) /news.php?path=$1&page=%1 [L]

или

RewriteEngine On
RewriteRule ^news/(.*)$ news.php?path=$1&%{QUERY_STRING} [L]

Таким образом в файле news.php можно принять переданные значения, например:

  • из адреса http://домен/news/novost_odin в $_GET['path'] будет novost_odin
  • из адреса http://домен/news/?page=2 в $_GET['path'] ничего не будет, а в $_GET['page'] будет 2
  • из адреса http://домен/news/novost_odin/?page=5 в $_GET['path'] будет novost_odin/, в $_GET['page'] будет 5

[ Saitadmin.ru || с 2006 по текущий год || Санкт-Петербург ]