GD Star Rating
loading...

Создам пост вопрошаек по mod_rewrite:

мне нужно получать domen.com/en/?bla–bla

ситуация такая, в куках сохраняется выбранный юзером lang и в зависимости от lang должен добавляться к пути либо /en/ либо /ru/

пишу пока так, пока не знаю как добавлять после /en/?bla–bla :

RewriteCond %{HTTP_COOKIE} ^.*lang=en.*$ [NC]
RewriteRule (.*) /en/ [L,QSA]

получаю 310 ошибку — циклическая переадресация.
нужна ваша помощь.

Админы и сочувствующие посетители hardblog.net посчитали злободневным:http://picplus.me

Tagged with →  

17 Responses to Создам пост вопрошаек по mod_rewrite:мне нужно получать domen.

  1. Relbad:

    Включи RewriteLog. Если не разберешься, то кидай сюда лог.

  2. WeMZlo:

    RewriteLog создается пустой.

  3. WeMZlo:

    : http://paste.pro/5141352
    вообще не въезжаю, помоги разобраться

  4. WeMZlo:

    Я понял, что ступил, нужно искать причину с другой стороны.
    Вопрос как правильно реализовать переадресацию открыт!
    Пойду еще подумаю

    image

  5. WeMZlo:

    То есть пользователь выбрал однажды lang=en и всюду куда бы он не переходил по сайту, чтобы в строке адреса его сопровождал /en/
    то есть заходит на domen.com – в строку адреса подставляется domen.com/en, но при этом юзер получает страницу domen.com
    также переходит по адресу domen.com/about (или domen.com/en/about) – а в строке адреса получает всегда domen.com/en/about, при этом получает страницу из domen.com/about

    пишу пока так условие, пока не знаю как добавлять после /en/?bla–bla :

    RewriteCond %{HTTP_COOKIE} ^.*lang=en.*$ [NC]

    правило не знаю как правильно описать

  6. Rehwhite:

    : чтобы domen.com/about в адресной строке юзера превратилось в domen.com/en/about, тебе нужно либо сделать редирект на domen.com/en/about, либо воспользоваться history.pushState(), но это яваскрипт и хтмл5. То есть (если я конечно тебя правильно понял) ты вообще не ту задачу решаешь. Тебе и рерайт на самом деле не нужен, потому что вытягивать lang = en из куки ты уже можешь и в движке самого сайта (а можешь преобразовывать url в url?lang=$1). И на основании куки уже нужно генерить все ссылки на самом сайте.

  7. WeMZlo:

    : да, ты правильно подсказываешь. Нужно периодически отдыхать, тогда и мыслишь правильно. Спасибо за советы. Буду дальше думать.

  8. Rehwhite:

    : да я сам такой же

  9. WeMZlo:

    Вышеописанная проблема была переосмыслена и решена внесением изменений в ядро.

    Появился следующий вопрос.
    Суть такова: необходимо все запросы юзера обрабатывать через https. Решено так:

    RewriteCond %{HTTPS}!=on
    RewriteCond %{HTTP_HOST} site.com [OR]
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI}

    Все работает отлично, но вот возникла проблема и для её решения необходимо в этом правиле сделать исключение.
    То есть нужно через https пропускать все запросы к сайту, кроме http://site.com/exception

    Пробовал перед правилом переадресации на https поставить:
    RewriteRule ^.*exception$ /exception [L]
    Не помогло.

    Обращаюсь к вам, знатоки.

  10. Rehwhite:

    : добавить третий RewriteCond типа %{REQUEST_URI}!=exception (не помню уже как они пишутся), не?

  11. WeMZlo:

    : Спасибо! Помогло:
    RewriteCond %{REQUEST_URI}!= /exception

  12. WeMZlo:

    : А как быть в такой ситуации?
    Необходимо, чтобы все переходы, кроме одного, всегда проходили по https протоколу, если делаю так:

    RewriteCond %{HTTPS}!=on
    RewriteRule ^(.*)$ https://site.ru/$1 [R]

    Все отлично, все переходы идут через https. Если, в ожидании исключения для адреса пишу так:

    RewriteCond %{HTTPS}!=on
    RewriteCond %{REQUEST_URI}!= /?exception&another
    RewriteRule ^(.*)$ https://site.ru/$1 [R]

    Перестает работать редирект для всех.

  13. Rehwhite:

    : апач в логи может написать, какой именно request_uri он видит? Что происходит, если написать что-нибудь типа RewriteCond %{REQUEST_URI}!= /smth?
    весь мой опыт, на самом деле, сводится к обману вордпресса и выдаче двух самописных фидов вместо предложенных вордпрессом

  14. Rehwhite:

    : и это, ты уверен что тебе нужен мод_рерайт, а не редирект юзера на адрес с вбитым протоколом https?

  15. WeMZlo:

    : такая же фигня с опытом

  16. WeMZlo:

    : да, там с особенностями api процессинга связано. В общем решил проблему. Результирующий htaccess пополнился такими строками:
    RewriteCond %{HTTPS}!=on
    RewriteCond %{REQUEST_URI}!= /?exception&another
    RewriteRule ^(.*)$ https://site.ru/$1 [R]
    Проблема, из-за которой не работало так как надо была банально проста – сам же наступил на свои грабли, которые с дуру написал и сам же про них забыл.
    Action в форме был написан в виде абсолютно пути (это ж надо было такое написать!): http://site.ru/?exception&another
    Извиняюсь за беспокойство.

Добавить комментарий