1
Perl / строка с условиями на perl
« : 24 Июня 2008, 11:11:19 »
помогите написать оброботку строки с условиями для записи в .htaccess
имеется сайт например
site111.ru
и еще 4 доменных имени привязанных алиасом к нему:
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
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. конец :)
В перл можно сделать выражение одной строкой (если не ошибаюсь)
ЗАДАЧКА ДЛЯ ПРОФЕССИОНАЛОВ!
имеется сайт например
site111.ru
и еще 4 доменных имени привязанных алиасом к нему:
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
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. конец :)
В перл можно сделать выражение одной строкой (если не ошибаюсь)
ЗАДАЧКА ДЛЯ ПРОФЕССИОНАЛОВ!