Помогите настроить редирект в .htaccess :)

nou
На сайте с 03.03.2007
Offline
64
nou
929

Блин. Сам совсем лузер в этом. Погуглил, ничего не нагуглил. :gm:

Задача

Есть сайт, есть каталог

est.ru/news/super.html

Нужно, чтоб при переходе пользователь автоматом улетал

nado.ru/news/super.html

Вся проблема в том, что в папке из которой открывается est.ru открываются еще десяток сайтов (est2.ru, est3.ru и т.д.) и вот с них, редиректа быть недолжно.

[umka]
На сайте с 25.05.2008
Offline
456
#1

RewriteEngine on

RewriteCond %{HTTP_HOST} ^est.ru$

RewriteRule ^(.*)$ http://nado.ru/$1 [R=301,L,QSA]

Лог в помощь!
F
На сайте с 21.12.2010
Offline
1
#2

Чтобы не создавать новую тему, опишу суть проблемы здесь, надеюсь автор не будет против.

Есть сайт на движке. Изнчально адреса страниц выглядели так: www.site.ru/index.php?page=stranica

поколдовав с config.php и .htaccess добился более красивого вида: www.site.ru/stranica

для этого прописал след. в .htaccess:

Options +FollowSymLinks
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?page=$1 [QSA]
</IfModule>

Проблема появилась при добавлении 301-ого редиректа с www на без www.

добавив записи редиректа, получился такой код:

Options +FollowSymLinks
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?page=$1 [QSA]
</IfModule>

<FilesMatch "robots.txt$">
RewriteEngine off
</FilesMatch>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.site.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]

Редирект работает, если набрать www.site.ru, то открывает без www и все ссылки открываются в новом, красивом виде.

А если набрать www.site.ru/stranica ,то открывается так: http://site.ru/index.php?page=stranica. То есть, редирект на без www сработал, а красивость ссылки пропала.

Вопрос: можно ли это как-то вылечить, подправив .htaccess? Научный тык и переставление строк мало чем помогли :)

Заранее спасибо,

А.

siv1987
На сайте с 02.04.2009
Offline
427
#3
добавив записи редиректа, получился такой код:

Какое-то извращение получилось. Не проще ли создать еще одно исключающие правило для роботс чем писать столько кода?

По сути так и должно быть, как вы описали. Преобразование не заканчивается на index.php?page=$1 а продолжается дальше, там перехватывается редиректом с www на без и происходит внешний редирект. Повторная проверка уже не совпадает с шаблон и цикл прекращается.

В данном случае достаточно просто добавить редирект перед ЧПУ.

RewriteEngine On

RewriteBase /

RewriteCond %{REQUEST_URI} !/robots.txt$

RewriteCond %{HTTP_HOST} ^www\.site\.ru

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

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?page=$1 [QSA]

#QSA тут даже и не нужен. У вас есть такие ссылки site.ru/stranica_чпу?query

F
На сайте с 21.12.2010
Offline
1
#4

siv1987, премного благодарен, так не только работает, но и короче. (:

isick1
На сайте с 04.01.2009
Offline
118
#5

Чтобы не открывать новую тему.

У меня такая проблема, есть сайт А хотел бы чтобы был редирект с другого домена Б, т.е. сайт А полноценный, а Б просто домен.

Какие действия мне надо сделать?

Регистрация в каталогах сайтов и досках объявлений (/ru/forum/768536) Добавить автообъявление (http://avtotranskont.ru)
F
На сайте с 21.12.2010
Offline
1
#6

в .htaccess просто домена Б пиши

RewriteEngine on
RewriteRule (.*) http://www.полноценныйсайтА.ru/$1 [R=301,L]

Фишка в том, что Яндекс-боту желательно оставить доступ к роботс.тхт домена Б, где будет прописан host: www.полноценныйсайтА.ru . поэтому добавляешь исключение и получается:

<FilesMatch "robots.txt$">
RewriteEngine off
</FilesMatch>
Options +Indexes
Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) http://www.полноценныйсайтА.ru/$1 [R=301,L]

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