URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 5824
[ Назад ]

Исходное сообщение
"htaccess - ПОМОГИТЕ ПОЖАЛУСА особый редирект "

Отправлено hr1 , 19-Июн-08 13:08 
ПОМОГИТЕ ПОЖАЛУСА особый редирект в .htaccess

имеется сайт например
site111.ru
и еще 4 доменных имени привязанных fалиасом к нему:
site-111.ru
s111.ru
zite111.ru
site111.com

как прописать в .htaccess чтобы

1. все ссылки  с второстепенными доменными именами 2 уровня переписывались на имя основного сайта
например: ( символ -> означает преобразование ссылки )
www.site-111.ru  -> www.site111.ru
www.site111.com  -> www.site111.ru
zite111.ru  -> site111.ru или www.site111.ru
www.s111.ru/user/aa -> www.site111.ru/user/aa

site111.ru -> не преобразовывать
www.site111.ru  -> не преобразовывать

2. сохраняя 1 условие перенаправлять все ссылки с доменом третего уровня на подкаталог с тем же именем
например:
123.site111.ru -> site111.ru/123
anna.site111.ru -> site111.ru/anna
v777g1.site111.ru -> site111.ru/v777g1

возможно v777g1.site111.ru/user/ss -> site111.ru/v777g1


выполняя условия обеих преобразований должно получится

zite111.ru -> site111.ru
www.zite111.ru -> www.site111.ru
www.zite111.ru/user/ss -> www.site111.ru/user/ss

222.site111.ru  ->  site111.ru/222
222.zite111.ru  ->  222.site111.ru  ->  site111.ru/222
anton.zite111.ru/user/ss  ->  anton.site111.ru/user/ss  ->  site111.ru/user/ss

пожалуств помогите прописать "условия" в файл .htaccess


Содержание

Сообщения в этом обсуждении
"htaccess - ПОМОГИТЕ ПОЖАЛУСА особый редирект "
Отправлено hr1 , 19-Июн-08 13:38 
p.s. сайт находится на виртуальном хостинге

"htaccess - ПОМОГИТЕ ПОЖАЛУСА особый редирект "
Отправлено Lucf3r , 19-Июн-08 14:06 
>p.s. сайт находится на виртуальном хостинге

Почитайте например здесь все описано:
http://sb-money.ru/article.php?a=75


"htaccess - ПОМОГИТЕ ПОЖАЛУСА особый редирект "
Отправлено hr1 , 20-Июн-08 09:38 
спасибо, очень полезная ссылка.

Но я хотел бы выражение чтобы выполнялись вышеперечисленные 2 условия .
что то похожее на это
RewriteEngine on
RewriteCond %{HTTP_HOST} ^yoursite\.com
RewriteRule ^(.*)$ http://www.yoursite.com/$1 [R=permanent,L] .

можно тупо набрать все возможные комбинации и прописать их вручную через Redirect, но это не самый правильный путь

я предполагаю что для моей задачи нужно будет сложное выражение с использованием средств Perl regular expressions


"htaccess - ПОМОГИТЕ ПОЖАЛУСА особый редирект "
Отправлено Pahanivo , 20-Июн-08 13:35 
Создать на алиасны имена отдельные домены и прописать с них редирект на основной.

Мод реврайт это не для твоего случая - он перелопачивает ссылку внутри сервака, те в браузере она останется оригинальной. Например идеш на site.ru/1/2/3 а реально сервак обрабатывает запрос после реврайтинга site.ru/index.php?arg1=1:arg2=2:arg3=3


"htaccess - ПОМОГИТЕ ПОЖАЛУСА особый редирект "
Отправлено hr1 , 23-Июн-08 19:59 
на данный момент использую в .htaccess


RewriteEngine on

RewriteCond %{HTTP_HOST} ^zite111.ru
RewriteRule ^(.*)$ http://www.site111.ru/$1 [R=301]

RewriteCond %{HTTP_HOST} ^site-111.ru
RewriteRule ^(.*)$ http://www.site111.ru/$1 [R=301]

RewriteCond %{HTTP_HOST} ^s111.ru
RewriteRule ^(.*)$ http://www.site111.ru/$1 [R=301]

RewriteCond %{HTTP_HOST} ^site111.com
RewriteRule ^(.*)$ http://www.site111.ru/$1 [R=301]

RewriteCond %{HTTP_HOST} ^123.obzor360.ru
RewriteRule ^(.*)$ http://obzor360.ru/10/$123 [R=301]


со своей задачей пока справляется.
но мне нужно прописать правильные "условия"
нужна грамотная Perl строка с проверкой условий


постараюсь описать алгоритм
я символически обозначил (на Perl языке это выглядит иначе):
%1 - строка домена 3 уровня
%2 - подкаталоги (все что следует после site111.ru/...)

1. Проверка HTTP_HOST
2. Если адрес %1.site111.ru/%2 перейти на пункт 4
3. Заменить ссылку на %1.site111.ru/%2
4. Если %1=""(пустой) или %1="www" перейти пункт 6
5. Заменить ссылку на site111.ru/%1
6. конец :)

В перл можно сделать выражение одной строкой (если не ошибаюсь)

ЗАДАЧКА ДЛЯ ПРОФЕССИОНАЛОВ!

>[оверквотинг удален]
>
>zite111.ru -> site111.ru
>www.zite111.ru -> www.site111.ru
>www.zite111.ru/user/ss -> www.site111.ru/user/ss
>
>222.site111.ru  ->  site111.ru/222
>222.zite111.ru  ->  222.site111.ru  ->  site111.ru/222
>anton.zite111.ru/user/ss  ->  anton.site111.ru/user/ss  ->  site111.ru/user/ss
>
>пожалуств помогите прописать "условия" в файл .htaccess


"htaccess - ПОМОГИТЕ ПОЖАЛУСА особый редирект "
Отправлено hr1 , 23-Июн-08 20:03 
на данный момент использую в .htaccess


RewriteEngine on

RewriteCond %{HTTP_HOST} ^zite111.ru
RewriteRule ^(.*)$ http://www.site111.ru/$1 [R=301]

RewriteCond %{HTTP_HOST} ^site-111.ru
RewriteRule ^(.*)$ http://www.site111.ru/$1 [R=301]

RewriteCond %{HTTP_HOST} ^s111.ru
RewriteRule ^(.*)$ http://www.site111.ru/$1 [R=301]

RewriteCond %{HTTP_HOST} ^site111.com
RewriteRule ^(.*)$ http://www.site111.ru/$1 [R=301]

RewriteCond %{HTTP_HOST} ^123.site111.ru
RewriteRule ^(.*)$ http://site111.ru/123 [R=301]


"htaccess - ПОМОГИТЕ ПОЖАЛУСА особый редирект "
Отправлено hr1 , 25-Июн-08 12:12 
http://perldoc.perl.org/perlre.html

вот здесь нашел описания как на перле преобразовывать строку
но в PERL е я не силен и разобраться пока не смог, может кто подскажет,


"Я ЭТО СДЕЛАЛ!!!"
Отправлено hr1 , 02-Июл-08 17:59 
После долгих экспериментов и изучения документации
Я ЭТО СДЕЛАЛ!!!
Итак готовый "скрипт" для .htaccess в студию!!!

RewriteEngine on

RewriteCond %{HTTP_HOST} !^site111.ru
RewriteRule  ^(.*)$ - [C]

RewriteCond %{HTTP_HOST} ^(www\.site111\.ru)|^(www\.zite111\.ru)|^(zite111\.ru)|^(www\.site-111\.ru)|^(site-111\.ru)|^(www\.s111\.ru)|^(s111\.ru)|^(www\.site111\.com)|^(site111\.com)
RewriteRule ^(.*)$ http://site111.ru/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^www\.(.+)\.site111\.ru [OR]
RewriteCond %{HTTP_HOST} ^(.+)\.site111\.ru [OR]
RewriteCond %{HTTP_HOST} ^www\.(.+)\.zite111\.ru [OR]
RewriteCond %{HTTP_HOST} ^(.+)\.zite111\.ru [OR]
RewriteCond %{HTTP_HOST} ^www\.(.+)\.site-111\.ru [OR]
RewriteCond %{HTTP_HOST} ^(.+)\.site-111\.ru [OR]
RewriteCond %{HTTP_HOST} ^www\.(.+)\.s111\.ru [OR]
RewriteCond %{HTTP_HOST} ^(.+)\.s111\.ru [OR]
RewriteCond %{HTTP_HOST} ^www\.(.+)\.s111\.com [OR]
RewriteCond %{HTTP_HOST} ^(.+)\.site111\.com
RewriteRule ^(.*)$ http://site111.ru/%1/$1 [R=301,L]

Что происходит?
в первом условии
если url= http://site111.ru/... сразу выходим

во втором условии
если нет домена третьего уровня или там cтрока www
переписываем все на http://site111.ru/...

пример:
s111.ru ->site111.ru
www.zite111.ru/33 -> site111.ru/33
www.site111.ru -> site111.ru


в третьем условии
берем домен  третьего уровня (игнорируя www перед ним)
и помещаем его в подкаталог сдвигая все остальные подкаталоги

пример:
go.site111.ru -> site111.ru/go
www.yes.zite111.ru -> site111.ru/yes
www.rock.s111.ru/user/de -> site111.ru/rock/user/de

Надеюсь кому то это еще пригодится :)