ПОМОГИТЕ ПОЖАЛУСА особый редирект в .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/aasite111.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/ss222.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
p.s. сайт находится на виртуальном хостинге
>p.s. сайт находится на виртуальном хостингеПочитайте например здесь все описано:
http://sb-money.ru/article.php?a=75
спасибо, очень полезная ссылка.Но я хотел бы выражение чтобы выполнялись вышеперечисленные 2 условия .
что то похожее на это
RewriteEngine on
RewriteCond %{HTTP_HOST} ^yoursite\.com
RewriteRule ^(.*)$ http://www.yoursite.com/$1 [R=permanent,L] .можно тупо набрать все возможные комбинации и прописать их вручную через Redirect, но это не самый правильный путь
я предполагаю что для моей задачи нужно будет сложное выражение с использованием средств Perl regular expressions
Создать на алиасны имена отдельные домены и прописать с них редирект на основной.Мод реврайт это не для твоего случая - он перелопачивает ссылку внутри сервака, те в браузере она останется оригинальной. Например идеш на site.ru/1/2/3 а реально сервак обрабатывает запрос после реврайтинга site.ru/index.php?arg1=1:arg2=2:arg3=3
на данный момент использую в .htaccess
RewriteEngine onRewriteCond %{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
RewriteEngine onRewriteCond %{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]
http://perldoc.perl.org/perlre.htmlвот здесь нашел описания как на перле преобразовывать строку
но в PERL е я не силен и разобраться пока не смог, может кто подскажет,
После долгих экспериментов и изучения документации
Я ЭТО СДЕЛАЛ!!!
Итак готовый "скрипт" для .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Надеюсь кому то это еще пригодится :)