The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Сложная замена URL в nginx или htaccess ?, !*! anstrem, 25-Июн-15, 10:58  [смотреть все]
Подскажите как решить задачку с подменой URL и где лучше в nginx или htaccess ?

Нужно вместо страницы
http://site.ru/page?filter=&fd13=105
переадресовать пользователя на страницу:
http://site.ru/page/subpage
Но показать ему при этом содержимое из:
http://site.ru/page?filter=&fd13=105&code=m


Если в общем случае, то это будет звучать как:
1) если URL заканчивается параметром "?filter=&fd13=105", то надо в адресной строке заменить этот параметр на "/subpage"
2) и далее следом если URL заканчивается на /subpage, то надо показать данные c URL что вызывается, но в котором заменено "/subpage" на "?filter=&fd13=105&code=m"

Ну и чтобы при этом зацикливания не произошло, хотя вроде и не должно...

Если просто напрямую вызовут URL заканчивающийся на /subpage, то естественно тоже чтобы 2-ое правило отработало.

  • Сложная замена URL в nginx или htaccess ?, !*! Pahanivo, 15:19 , 25-Июн-15 (1)
    > Подскажите как решить задачку с подменой URL и где лучше в nginx
    > или htaccess ?
    > Нужно вместо страницы
    > http://site.ru/page?filter=&fd13=105
    > переадресовать пользователя на страницу:
    > http://site.ru/page/subpage
    > Но показать ему при этом содержимое из:
    > http://site.ru/page?filter=&fd13=105&code=m

    и какой в этом, мать его, сакральный смысл?

    > Если в общем случае, то это будет звучать как:
    > 1) если URL заканчивается параметром "?filter=&fd13=105", то надо в адресной строке заменить
    > этот параметр на "/subpage"
    > 2) и далее следом если URL заканчивается на /subpage, то надо показать
    > данные c URL что вызывается, но в котором заменено "/subpage" на
    > "?filter=&fd13=105&code=m"

    сначала накидают быдлокод, а потом устраивают вечеринки с бубнами ...
    1) отдавать нормальные линки не пробовали?
    2) писать нормальный код не пробовали?
    3) маны лицезреть не пробовали?
    4) решить задачу разбивкой на две: замена №1 СРАЗУ на №3, и замена №2 на №3
    5) остальное в манах реврайта мой юный падаван ...
    это как я понял - что вы там подразумевали я хз ...

    > Ну и чтобы при этом зацикливания не произошло, хотя вроде и не
    > должно...

    чтобы произошло зацикливание №1 и №3 должны быть идентичные, хотя когда мозга нет и руки из жо... то все возможно!

    > Если просто напрямую вызовут URL заканчивающийся на /subpage, то естественно тоже чтобы
    > 2-ое правило отработало.

    • Сложная замена URL в nginx или htaccess ?, !*! anstrem, 15:27 , 25-Июн-15 (2)
      Сакральный смысл простой:

      Пользователь на сайте выбирает опции фильтра: мальчик или девочка
      В результате генериться URL с параметрами например: http://site.ru/page?filter=&fd13=105

      А теперь надо чтобы вместо этой хрени на экране у него сформировался в адресной строке ЧПУ http://site.ru/page/subpage , но данные были получены с этой хрени с еще одним доп параметром, т.е. отсюда http://site.ru/page?filter=&fd13=105&code=m

      Все это для того чтобы реализовать вот такой же вариант (при этом ничего не меняя в коде, а только пошаманив в htaccess, если это конечно возможно):

      http://www.kinderly.ru/collection/krossovki
      http://www.kinderly.ru/collection/krossovki/dlya-devochki
      http://www.kinderly.ru/collection/krossovki/dlya-malchika

      Предполагалась где то вот такая конструкция:

      RewriteCond %{QUERY_STRING} ^filter=%26fd13%3D105$
      RewriteRule ^(.*)$ $1/dlya_malchikov? [L,R=301]
      RewriteRule ^/dlya_malchikov$ ?filter=%26fd13%3D105$&language_code=nl [L,NE]

      Т.е. если в параметрах видим "filter=%26fd13%3D105", то делаем редирект на /dlya_malchikov, а потом если видим в адресе /dlya_malchikov, то показываем данные из ?filter=%26fd13%3D105$&code=nl

      Первая часть с редиректом отрабатывает, а вот со второй проблема, на 404 ошибку кидает все время, хотя если ручками вбить такой URL (?filter=%26fd13%3D105$&code=nl), то он открывается ...

      • Сложная замена URL в nginx или htaccess ?, !*! Pahanivo, 16:03 , 25-Июн-15 (3)
        > Сакральный смысл простой:
        > Пользователь на сайте выбирает опции фильтра: мальчик или девочка
        > В результате генериться URL с параметрами например: http://site.ru/page?filter=&fd13=105
        > А теперь надо чтобы вместо этой хрени на экране у него сформировался
        > в адресной строке ЧПУ http://site.ru/page/subpage , но данные были получены с
        > этой хрени с еще одним доп параметром, т.е. отсюда http://site.ru/page?filter=&fd13=105&code=m

        вы пытаетесь синтезировать некий алгоритм, смысла я так и не понял - понял что надо заменить через жопу урлы, но _ЗАЧЕМ_ так и не понял.

        > Все это для того чтобы реализовать вот такой же вариант (при этом
        > ничего не меняя в коде, а только пошаманив в htaccess, если
        > это конечно возможно):

        т.е. научить код реагировать "правильно" на "корявые" ссылки при этом не меняя кода? оригинально!

        > http://www.kinderly.ru/collection/krossovki
        > http://www.kinderly.ru/collection/krossovki/dlya-devochki
        > http://www.kinderly.ru/collection/krossovki/dlya-malchika
        > Предполагалась где то вот такая конструкция:
        > RewriteCond %{QUERY_STRING} ^filter=%26fd13%3D105$
        > RewriteRule ^(.*)$ $1/dlya_malchikov? [L,R=301]
        > RewriteRule ^/dlya_malchikov$ ?filter=%26fd13%3D105$&language_code=nl [L,NE]
        > Т.е. если в параметрах видим "filter=%26fd13%3D105", то делаем редирект на /dlya_malchikov,
        > а потом если видим в адресе /dlya_malchikov, то показываем данные из
        > ?filter=%26fd13%3D105$&code=nl

        а почему, блиать, сразу не переписать первое на третье??????


        > Первая часть с редиректом отрабатывает, а вот со второй проблема, на 404
        > ошибку кидает все время, хотя если ручками вбить такой URL (?filter=%26fd13%3D105$&code=nl),
        > то он открывается ...

        • Сложная замена URL в nginx или htaccess ?, !*! anstrem, 16:06 , 25-Июн-15 (4)

          > а почему, блиать, сразу не переписать первое на третье??????

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

          А переписывать чужой говнокод не всегда возможно.

          Вместо туевой кучи бесцельных комментов не по теме, лучше бы сказали как так сделать...


          • Сложная замена URL в nginx или htaccess ?, !*! Pahanivo, 16:21 , 25-Июн-15 (5)
            >> а почему, блиать, сразу не переписать первое на третье??????
            > блиать, потому что в адресной строке надо чтобы было второе, а на
            > экране чтобы выводилось то что находится по третьей ссылке

            1) иногда лучше молчать, и казаться умнее, чем заговорить и развеять все сомнения (С) народная мудрость
            2) феерично
            3) то что браузер запросил, то он в адресной строке и пишет (GET)
            4) для этого есть POST, сессии и т.д.

            > А переписывать чужой говнокод не всегда возможно.

            fix: не всегда умеют

            > Вместо туевой кучи бесцельных комментов не по теме, лучше бы сказали как
            > так сделать...

            мои коменты были весьма таки по теме, я просто пытался понять "зачем", но вы подтвердили мои самые худшие сомнения ...

            • Сложная замена URL в nginx или htaccess ?, !*! anstrem, 16:28 , 25-Июн-15 (6)

              > мои коменты были весьма таки по теме, я просто пытался понять "зачем",
              > но вы подтвердили мои самые худшие сомнения ...

              Я может не очень понимаю как работает htaccess, но разве такое не возможно ?

              Браузер запрашивает URL1 с параметрами
              Апач по соответствующей директиве в htaccess делает внешний редирект на другую адресную строку без параметров и фактически запускает новую сессию с новым URL2
              Получив запрос по новому URL2 Апач по другой директиве в htaccess не меняя URL2 (внутренний редирект) выдает данные с третьего URL3

              Или так оно не может работать ?

              • Сложная замена URL в nginx или htaccess ?, !*! Square, 16:40 , 25-Июн-15 (7)
                >> мои коменты были весьма таки по теме, я просто пытался понять "зачем",
                >> но вы подтвердили мои самые худшие сомнения ...
                > Я может не очень понимаю как работает htaccess, но разве такое не
                > возможно ?
                > Браузер запрашивает URL1 с параметрами
                > Апач по соответствующей директиве в htaccess делает внешний редирект на другую адресную
                > строку без параметров и фактически запускает новую сессию с новым URL2
                > Получив запрос по новому URL2 Апач по другой директиве в htaccess не
                > меняя URL2 (внутренний редирект) выдает данные с третьего URL3
                > Или так оно не может работать ?

                урл /dlya_malchikov - он же один только может быть да?
                а урлов ?filter=%26fd13%3D105$&code=nl - дофига ?

                как по вашему сервер опознает какую страницу из этих дофига он должен показать если все клиенты пришлют ему только "/dlya_malchikov"?

                попробуйте поискать тут:
                http://www.yandex.ru/search/?text=ЧПУ%20сайт&clid=9582&lr=213

                http://blogiseo.ru/blogovedenie/kak-sdelat-chpu-dlya-sajta.html

                • Сложная замена URL в nginx или htaccess ?, !*! anstrem, 16:58 , 25-Июн-15 (8)
                  > Вы не понимаете.
                  > вид урла рисует БРАУЗЕР.
                  > Вы, правкой htaccess, НИКАК не сможете поменять то что рисует браузер.
                  > А браузер вам нарисует ту ссылку которая в коде странички.
                  > На сайте который вы привели - включен ЧПУ.

                  Чета я действительно уже ничего не понимаю
                  А что тогда описано в бесконечных FAQ в сети с заголовками: "Управляем URL с помощью .htaccess и mod_rewrite" ?

                  Я у себя на сайте без проблем же меняю что рисует браузер через .htaccess

                  Запрашиваю в адресной строке браузера
                  http://site.ru/kedyi-krossovki?filter=%26fd13%3D105

                  В результате после редиректа в браузере получаю:
                  http://site.ru/kedyi-krossovki/dlya_malchikov

                  Делается это вот этим двумя командами в htaccess:

                  RewriteCond %{QUERY_STRING} ^filter=%26fd13%3D105$
                  RewriteRule ^(.*)$ $1/dlya_malchikov? [L,R=301]

                  Это же обычный 301 редирект с одного URL на другой.
                  Ну можно его в nginx еще сделать же...


                  Но никакого URL http://site.ru/kedyi-krossovki/dlya_malchikov у меня естественно на сайте нет и поэтому надо дальше проброс сделать через внутренний какой то скрытый редирект что тоже в куче форумов с заголовками "Внутренний редирект без смены URL"
                  Все прочел, но что то не склеивается :)


                  • Сложная замена URL в nginx или htaccess ?, !*! Square, 17:12 , 25-Июн-15 (9)
                    >[оверквотинг удален]
                    > Делается это вот этим двумя командами в htaccess:
                    > RewriteCond %{QUERY_STRING} ^filter=%26fd13%3D105$
                    > RewriteRule ^(.*)$ $1/dlya_malchikov? [L,R=301]
                    > Это же обычный 301 редирект с одного URL на другой.
                    > Ну можно его в nginx еще сделать же...
                    > Но никакого URL http://site.ru/kedyi-krossovki/dlya_malchikov у меня естественно на
                    > сайте нет и поэтому надо дальше проброс сделать через внутренний какой
                    > то скрытый редирект что тоже в куче форумов с заголовками "Внутренний
                    > редирект без смены URL"
                    > Все прочел, но что то не склеивается :)

                    Описание:
                    Предположим что мы недавно переименовали страницу bar.html в foo.html и сейчас хотим для обратной совместимости сделать доступным и старый URL. В действительности мы хотим чтобы пользователи использующие старый URL даже не узнали что страницы были переименованы.
                    Решение:
                    Мы перенаправим старый URL на новый через внутренний редирект путем следующих директив:

                    RewriteEngine on
                    RewriteBase /~quux/
                    RewriteRule ^foo\.html$ bar.html

                    http://www.htaccess.net.ru/doc/mod_rewrite/

                • Сложная замена URL в nginx или htaccess ?, !*! anstrem, 17:31 , 25-Июн-15 (10)

                  > урл /dlya_malchikov - он же один только может быть да?
                  > а урлов ?filter=%26fd13%3D105$&code=nl - дофига ?
                  > как по вашему сервер опознает какую страницу из этих дофига он должен
                  > показать если все клиенты пришлют ему только "/dlya_malchikov"?

                  Да нет, сервер просто должен заменить в любом урл "/dlya_malchikov" на урл "?filter=%26fd13%3D105$&code=nl"

                  Точнее не так !!!
                  Урл сервер должен оставить в данном случае без изменений, то есть как было "/dlya_malchikov" так и должно остаться "/dlya_malchikov"
                  А вот данные сервер должен подгрузить со страницы с "?filter=%26fd13%3D105$&code=nl"

                  Это возможно ? Или это только в PHP, javascript, ajax и т.д. сделать можно ?

                  Вот если я Ваш пример правильно понял выше. Пользователь наберет старый url bar.html
                  и увидит по нему информацию которая на сервера на самом то деле лежит по url foo.html
                  Причем он даже и не узнает от том что bar.html уже нет.

                  Вот и мне надо чтобы пользователь набрал в адресной строке /dlya_malchikov, а увидел информацию со страницы ?filter=%26fd13%3D105$&code=nl (но в адресной строке у него осталось /dlya_malchikov)

                  • Сложная замена URL в nginx или htaccess ?, !*! Andrey Mitrofanov, 17:40 , 25-Июн-15 (11)
                    >> как по вашему сервер опознает какую страницу из этих дофига он должен
                    >> показать если все клиенты пришлют ему только "/dlya_malchikov"?
                    > Да нет, сервер просто должен заменить
                    > Точнее не так !!!
                    > Урл сервер должен оставить в данном случае без изменений,

                    Вы уверены, что уже не пора начинать спрашивать _прокси_, переписывающий и URL-и запросов, и выдаваемый в ответ HTML? Хинт: "Неиспраавленное" приложение отдаёт html-и со ссылками внутри на _непереписанные_ URL-и [своих соседних страниц~].

                    И, да, в общем случае эта задача не разрешима: генерация url-ей js-ами; url-и внутри... ну, скажем, флэшей. Да мало ли ни с чем не совместимой пакости (sip, rtsp?) проскакивает в этом вашем http.

                  • Сложная замена URL в nginx или htaccess ?, !*! Pahanivo, 17:47 , 25-Июн-15 (12)
                    > Это возможно ? Или это только в PHP, javascript, ajax и т.д.
                    > сделать можно ?

                    ! Н Е В О З М О Ж Н О !


                    > Вот если я Ваш пример правильно понял выше. Пользователь наберет старый url
                    > bar.html
                    > и увидит по нему информацию которая на сервера на самом то деле
                    > лежит по url foo.html
                    > Причем он даже и не узнает от том что bar.html уже нет.
                    > Вот и мне надо чтобы пользователь набрал в адресной строке /dlya_malchikov, а
                    > увидел информацию со страницы ?filter=%26fd13%3D105$&code=nl (но в адресной строке у него
                    > осталось /dlya_malchikov)

                    еще раз для очень одаренных:
                    1) не хотите светить переменные - POST, сессии и т.д.
                    2) это GET метод, детка!
                    3) принцип http следующий: а) браузер просил урл у сервера б) уже на сервере происходить подмена урла если включен реврайт, до непостредственной обработки в) подмененный урл реврайт подсовывается веб серверу г) сервер отвечает на переписанный урл е) все конец
                    и тут два важных момента: первый - при каждом новом урле итерация повторится (после редиректа), и данные итерации НЕЗАВИСИМЫЕ, вот чтобы их "увязать" есть переменные в урле (GET), или не в урле (POST), и второй момент - ни браузер ни сервер не знают что урл переписан!




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру