Автор Тема: .htaccess - ПОМОГИТЕ ПОЖАЛУСА особый редирект  (Прочитано 5199 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн hr1

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 13
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
.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

Оффлайн hr1

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 13
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
.htaccess - ПОМОГИТЕ ПОЖАЛУСА особый редирект
« Ответ #1 : 22 Июня 2008, 20:50:36 »
неужели никто так и не знает как это сделать?

Оффлайн ravshaniy

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 191
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
.htaccess - ПОМОГИТЕ ПОЖАЛУСА особый редирект
« Ответ #2 : 23 Июня 2008, 12:44:01 »
предупреждаю я не особо спец в настройке доменов и редиректах. но по-моему эта ситуация не решается одним .htaccess, то есть у вас как видно 5 сайтов, то есть это уже 5 файлов .htaccess.

вобще конечно несколько неправильно решать такую переадресацию средствами .htaccess, как то это затратно, если есть возможность сделать это настройкой адресации при настройке доменов. когда несколько доменных имен бы адресовали на один сайт было бы лучше наверное. возможно что при настройке апач можно ссылаться на одну директорию создании сайт *зоны*- если я не ошибся

но тем не менее вы хотите 5 сайтов и пять файлов .htaccess

ну и соответственно в каждом из файлов вы просто добавляете свой редирект
1-й способ : http://httpd.apache.org/docs/2.2/rewrite/rewrite_guide.html#redirecthome
2-й способ : http://httpd.apache.org/docs/2.2/mod/mod_alias.html#redirect

ну еще только выбирайте верную версию апач, и удачи вам
убили кенни, сволочи

Оффлайн hr1

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 13
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
описание алгоритма
« Ответ #3 : 23 Июня 2008, 20:05:15 »
на данный момент использую в .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]

со своей задачей пока справляется.
но мне нужно прописать правильные "условия"
нужна грамотная 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. конец :)

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

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

Оффлайн hr1

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 13
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
http://perldoc.perl.org/perlre.html
« Ответ #4 : 25 Июня 2008, 12:13:41 »
http://perldoc.perl.org/perlre.html

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

Оффлайн ravshaniy

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 191
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
.htaccess - ПОМОГИТЕ ПОЖАЛУСА особый редирект
« Ответ #5 : 25 Июня 2008, 12:47:30 »
перл здесь не причем, это как бы раз

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

у вас есть группа сайтов с которых редирект на основной сайт и у вас есть основной сайт. соответственно две разные задачи.
первая задача:
1. Проверка HTTP_HOST
3. Заменить ссылку на %1.site111.ru/%2
правильнее будет выполнить редирект и оба пункта делаются одним правилом: причем вы его уже написали


и вторая задача на основном сайте:
4. Если %1=""(пустой) или %1="www" перейти пункт 6
5. Заменить ссылку на site111.ru/%1
что чуть сложнее но также выполнимо:

RewriteEngine on
RewriteCond   %{HTTP_HOST}                 ^(www\\.)?[^.]+\\.site111\\.ru$
RewriteRule   ^(.+)                        %{HTTP_HOST}$1          [C]
RewriteRule   ^(www\\.)?([^.]+)\\.site111\\.ru(.*)  /$2/$3 [L]

возможно код ошибочный ну
исходный текст здесь читайте исправляйте
http://httpd.apache.org/docs/2.2/rewrite/rewrite_guide.html#uservhosts
убили кенни, сволочи

Оффлайн hr1

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 13
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
.htaccess - ПОМОГИТЕ ПОЖАЛУСА особый редирект
« Ответ #6 : 30 Июня 2008, 16:13:03 »
не получается

Оффлайн hr1

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 13
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Я ЭТО СДЕЛАЛ!!!
« Ответ #7 : 02 Июля 2008, 17:47:46 »
После долгих экспериментов и изучения документации
Я ЭТО СДЕЛАЛ!!!

Итак готовый "скрипт"для .htaccess в студию!!!
 
[SIZE=3][COLOR=green]

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]

[/COLOR][/SIZE]


Что происходит?
в первом условии
если 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

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

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28