хитрый редирект с mod_rewrite (my.ru/ru/index.html -> my.ru/site/index.html?lang=ru)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

SatanaClause
Сообщения: 106

хитрый редирект с mod_rewrite

Сообщение SatanaClause »

Перековырял все что нашел по модреврайте, чтото недогоняю... нужно все сделать исключительно с .htaccess.

Есть сайт, он находится в http://www.my.ru/site/index.html (сайт с cms, все php я уже переделал в html)
и есть переменная lang = (ru|en|lt) нужно в зависимости от /(ru|en|lt)/ показывать сайт с соответственно присвоенной lang и измененным путем

тоесть если пользователь наберет
http://www.my.ru/ru/index.html -> http://www.my.ru/site/index.html?lang=ru
http://www.my.ru/en/index.html -> http://www.my.ru/site/index.html?lang=en
http://www.my.ru/lt/index.html -> http://www.my.ru/site/index.html?lang=lt

соответственно вместо index.html может быть все что угодно.
http://www.my.ru/en/novosti.html -> http://www.my.ru/site/novosti.html?lang=en
http://www.my.ru/en/com,search/search.html -> http://www.my.ru/site/com,search/search.html?lang=en
http://www.my.ru/en/com,archive/ -> http://www.my.ru/site/com,archive/?lang=en

пользователь должен видить красивую ссылку, типо http://www.my.ru/ru/o_nas.html
Я люблю людей, люблю когда их нет;
Я бы вышел на болкон, и разрядил бы пистолет!
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: хитрый редирект с mod_rewrite

Сообщение KiWi »

И в чём он же он хитрый? Это самый стандартный вариант для mod_rewrite.
Что пробовали? Что не получилось?
Спасибо сказали:
SatanaClause
Сообщения: 106

Re: хитрый редирект с mod_rewrite

Сообщение SatanaClause »

KiWi писал(а):
03.12.2007 09:37
И в чём он же он хитрый? Это самый стандартный вариант для mod_rewrite.
Тока давайте без высокомерия... О сложности судит каждый по знаниям, я в это профан… Ну не работал я с mod_rewrite, не довелось...

KiWi писал(а):
03.12.2007 09:37
Что пробовали?
Руководствуясь апачевским мануалом и вот этим http://www.pcre.ru/docs/apache/text/urltrans/ (ссылка не моя ;) ) пробывал чтото типо

Код: Выделить всё

RewriteEngine On
RewriteBase /site
RewriteCond ${REQUEST_URI} ^.*\/(ru|en|lt)\/.*$  [NC]
RewriteRule http://my.ru/site/?lang=$1 [L]


KiWi писал(а):
03.12.2007 09:37
Что не получилось?

А неполучилось собственно говоря все, не работает.
Я люблю людей, люблю когда их нет;
Я бы вышел на болкон, и разрядил бы пистолет!
Спасибо сказали:
Аватара пользователя
megabrain
Сообщения: 10
ОС: FC8

Re: хитрый редирект с mod_rewrite

Сообщение megabrain »

Необходимо включить отладку модреврайта.. (в доке написано как и что)..
и посмотреть где затык..

лично я вижу что по указанным правилам переадресация будет только на индексную страницу
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: хитрый редирект с mod_rewrite

Сообщение KiWi »

SatanaClause писал(а):
03.12.2007 16:50

Код: Выделить всё

RewriteRule http://my.ru/site/?lang=$1 [L]

Ну... Можно, например, заглянуть в документацию к mod_rewrite на apache.org и посмотреть сколько параметров у RewriteRule.
А ещё можно выкладывать сюда не "что-то типа".
А ещё -- внимательнее смотреть на примеры...
Да и описывать можно ровно то, что нужно(это уже про RewriteCond).

megabrain писал(а):
03.12.2007 17:29
Необходимо включить отладку модреврайта.. (в доке написано как и что)..
и посмотреть где затык..

лично я вижу что по указанным правилам переадресация будет только на индексную страницу

А я вижу, что mod_rewrite пошлёт в далёкое пешее путешествие.
Спасибо сказали:
SatanaClause
Сообщения: 106

Re: хитрый редирект с mod_rewrite

Сообщение SatanaClause »

Для начала и индекс пойдет, Москва не сразу строилась ;)

А куда правильнее этот .htaccess ложить? В корень или /site ?

пробую так: /.htaccess, запрос http://my.ru/ru/

RewriteCond ${REQUEST_URI} ^.*\/(ru|en|lt)\/.*$ [NC]
RewriteRule http://my.ru/site/?lang=$1 [L]

access.log - - [03/Dec/2007:14:52:30 +0000] "GET /ru/ HTTP/1.0" 404 261 "-" "Mozilla/4.0 (compatible; MSIE
error.log File does not exist: /usr/local/www/data/my.ru/http/ru/
rewrite.log пусто, в него вообще ничего не пишется, хотя все php переделываются в html в нижустоящих каталогах

добавил примерно около

HostnameLookups Off
ErrorLog /usr/local/www/log/httpd-error.log
RewriteLog /usr/local/www/log/rewrite.log если добавлять в виртуальные хосты, то файл даже не создается


правило просто не срабатывает...
Я люблю людей, люблю когда их нет;
Я бы вышел на болкон, и разрядил бы пистолет!
Спасибо сказали:
SatanaClause
Сообщения: 106

Re: хитрый редирект с mod_rewrite

Сообщение SatanaClause »

Для проверки лога сделал

Redirect /ru http://my.ru/site/?lang=ru

правило работает, но лог rewrite.log пустой
Я люблю людей, люблю когда их нет;
Я бы вышел на болкон, и разрядил бы пистолет!
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: хитрый редирект с mod_rewrite

Сообщение KiWi »

SatanaClause писал(а):
03.12.2007 18:03
правило работает, но лог rewrite.log пустой

Правильно, потому что кто-то упорно не хочет читать документацию до конца: http://httpd.apache.org/docs/2.2/mod/mod_r...html#RewriteLog
Хинт -- там 2 подряд директивы, относящиеся к логам.
Второй хинт -- значение по умолчанию второй директивы.
Третий хинт -- обе директивы отвечают за логгирование действий mod_rewrite, а не за смену фаз луны.

P.S.: ответа но оба моих предыдущих замечания есть на той же странице(я про те, что связаны с RewriteRule & RewriteCond, если у кого проблемы с чтением написанного, либо памятью).
Спасибо сказали:
SatanaClause
Сообщения: 106

Re: хитрый редирект с mod_rewrite

Сообщение SatanaClause »

мдя... с логлевелом лопухнулся... Мне кажется что я чтото не то с регулярным выражением делаю, оно просто игнарируется, но когда я его пробую в перл скрипте, оно проходит. Влял для проверки кусок из мануала, без рег. выражений

Код: Выделить всё

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{TIME_HOUR}%{TIME_MIN} >1000
RewriteCond %{TIME_HOUR}%{TIME_MIN} <1900
RewriteRule .* - [F]


и неработает :( точнее работает, а должно блокирывать. Но когдпа ставлю заведомо неправильный флаг [FDF], ругается...

/.htaccess: RewriteRule: unknown flag 'FDF'\n
Я люблю людей, люблю когда их нет;
Я бы вышел на болкон, и разрядил бы пистолет!
Спасибо сказали:
SatanaClause
Сообщения: 106

Re: хитрый редирект с mod_rewrite

Сообщение SatanaClause »

вот

Код: Выделить всё

Options +FollowSymLinks
RewriteEngine On
RewriteRule (ru|lt|en) http://my.ru/site/?lang=$1 [L]


...

Код: Выделить всё

.../] rewrite ru/ -> http://my.ru/site/?lang=ru
.../] internal redirect with /site/ [INTERNAL REDIRECT]
....lt/http/cms/] pass through /usr/local/www/data/my.ru/http/site
....lt/http/cms/] pass through /usr/local/www/data/my.ru/http/site/index.php

...[04/Dec/2007:10:17:25 +0000] "GET /ru/ HTTP/1.0" 404 176 "-" "Mozilla/4.0 (compatibl...


в броузере пишет The page cannot be found (404) хотя по ссылке http://my.ru/site/?lang=ru все работает
Я люблю людей, люблю когда их нет;
Я бы вышел на болкон, и разрядил бы пистолет!
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: хитрый редирект с mod_rewrite

Сообщение KiWi »

SatanaClause писал(а):
04.12.2007 13:20
в броузере пишет The page cannot be found (404) хотя по ссылке http://my.ru/site/?lang=ru все работает

Internal redirect есть? index.php оно само дорисовывает? Вот и всё -- все вопросы к CMS.
Спасибо сказали:
SatanaClause
Сообщения: 106

Re: хитрый редирект с mod_rewrite

Сообщение SatanaClause »

Мдя... Картина Репина, приплыли...

А если пробывать с флагом [P] статистика сайта будет нормальная или как после прокси???

пришел вот к такому
RewriteRule (ru|lt|en)/(.*) /site/$2&lang=$1 [L]

Проблема в том что не передается то что после "?", тоесть ссылка http://my.ru/en/index.php?option=com_conte...=4&Itemid=5
лог

Код: Выделить всё

] rewrite en/index.php -> /site/index.php?lang=en
] internal redirect with /site/index.php [INTERNAL REDIRECT]
lt/http/site/] pass through /usr/local/www/data/alan.lt/http/site/index.php

а где все ?option=com_content&task=view&id=4&Itemid=5 ???
Я люблю людей, люблю когда их нет;
Я бы вышел на болкон, и разрядил бы пистолет!
Спасибо сказали: