The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
mod_rewrite - странность с %{REQUEST_URI}, !*! reivaX, 05-Мрт-11, 17:11  [смотреть все]
Что-то никак не могу нарыть в документации: возникла элементарная задача при запросе
/articles.php?id=1 сделать внешний редирект.

Естественно, первое приходящее в голову условие:

RewriteCond %{REQUEST_URI} =/articles.php?id=1

Не срабатывает, по логам видно, что в подстановку приходит /articles.php

[perdir /var/www/htdocs/] RewriteCond: input='/articles.php' pattern='=/articles.php?id=1' => not-matched

Собственно, почему не работает правило понятно, и сделаю то же самое на %{THE_REQUEST}, но хотелось бы понять, почему $_SERVER['REQUEST_URI'] в php содержит логичное "/articles.php?id=1", а для mod_rewrite QUERY часть, получается, отбрасывается.

  • mod_rewrite - странность с %{REQUEST_URI}, !*! Pahanivo, 17:41 , 05-Мрт-11 (1)
  • mod_rewrite - странность с %{REQUEST_URI}, !*! Aquarius, 19:09 , 05-Мрт-11 (2)
    • mod_rewrite - странность с %{REQUEST_URI}, !*! reivaX, 23:33 , 05-Мрт-11 (4)
      > а маскировать ничего не надо?

      Не уверен - там же типа лексическое равенство, эт опытно проверить надо, в принципе.

      Но в данном случае роли никакой не играет - это я еще на Мастерхосте сперва мучился, там маскировать пробовал по всякому, а потом на локале тестировать начал, т.к. зацепило, а на мастерхосте не логируется mod_rewrite.

      Ключевое там - что в инпуте идет "RewriteCond: input='/articles.php'", так что паттерн не важен.

      Вот, кстати, полный лог:

      127.0.0.1 - - [05/Mar/2011:15:43:52 +0200] [/sid#7f7a06af8d98][rid#7f7a06ee0e38/initial] (1) [perdir /var/www/htdocs/] pass through /var/www/htdocs/articles.php
      127.0.0.1 - - [05/Mar/2011:15:44:09 +0200] [/sid#7f7a06af8d98][rid#7f7a06eeffa8/initial] (3) [perdir /var/www/htdocs/] strip per-dir prefix: /var/www/htdocs/articles.php -> articles.php
      127.0.0.1 - - [05/Mar/2011:15:44:09 +0200] [/sid#7f7a06af8d98][rid#7f7a06eeffa8/initial] (3) [perdir /var/www/htdocs/] applying pattern '^.*$' to uri 'articles.php'
      127.0.0.1 - - [05/Mar/2011:15:44:09 +0200] [/sid#7f7a06af8d98][rid#7f7a06eeffa8/initial] (4) [perdir /var/www/htdocs/] RewriteCond: input='' pattern='=/articles.php?id=134' => not-matched

      А вот как приходит в "правильной" проверке через %{THE_REQUEST}

      127.0.0.1 - - [05/Mar/2011:16:20:48 +0200] [/sid#7f7a06af8d98][rid#7f7a06eeffa8/initial] (4) [perdir /var/www/htdocs/] RewriteCond: input='GET /articles.
      php?id=134 HTTP/1.1' pattern='^[A-Z]{3,9}\ /articles\.php\?id=134\ HTTP/' => matched

  • mod_rewrite - странность с %{REQUEST_URI}, !*! zoonman, 17:45 , 06-Мрт-11 (7)
    • mod_rewrite - странность с %{REQUEST_URI}, !*! reivaX, 23:16 , 06-Мрт-11 (9)
      > А что-то в articles.php мешает дописать следующее
      > if ($_GET['id'] == 1) {
      >  header("Location: http://opennet.ru/");
      > }

      Например то, что вопрос мой касается поведения mod_rewrite, а не того, как мне решить задачу (решенную сразу), тем более что в теме это указано явно.

      • mod_rewrite - странность с %{REQUEST_URI}, !*! zoonman, 23:25 , 06-Мрт-11 (10)
        • mod_rewrite - странность с %{REQUEST_URI}, !*! reivaX, 00:00 , 07-Мрт-11 (11)
          > Если задача решена, то какой смысл в применении mod_rewrite? Спортивный интерес?

          Смысл в том, чтобы понимать как что работает.

          "но хотелось бы понять, почему $_SERVER['REQUEST_URI'] в php содержит логичное "/articles.php?id=1", а для mod_rewrite QUERY часть, получается, отбрасывается."

          Учитывая то, что я перерыл по ходу оф. документацию, и как только мог придумать прогуглил, туманность этой мелочной заподлистости хотелось бы рассеять.

          К тому же день спустя опять затык другого свойства, опять же на REQUEST_URI, но там доступа к логам нет никакого, потому только по симптоматике вижу, что фигня творится.

          Где-то что-то мимоходом проскакивало про изменения в Apache 2.x, но без конкретики.

  • mod_rewrite - странность с %{REQUEST_URI}, !*! zoonman, 00:45 , 07-Мрт-11 (12)
    • mod_rewrite - странность с %{REQUEST_URI}, !*! zoonman, 01:18 , 07-Мрт-11 (13)
      • mod_rewrite - странность с %{REQUEST_URI}, !*! reivaX, 01:56 , 07-Мрт-11 (14)
        > Заинтересовали вы меня)))
        > RewriteEngine on
        > RewriteCond %{REQUEST_URI} /articles.php
        > RewriteCond %{QUERY_STRING} id=1
        > RewriteRule (.*) 1.php

        Нет, ну вы правы, конечно - ваша конструкция сработает, как и использованная мною

        RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /articles\.php\?id=134\ HTTP/

        Но вопрос-то в том, чтобы понять, на основании чего появляется разница в представлении REQUEST_URI для mod_rewrite, и для, скажем просто, модуля php.

        Т.е. понимая проявление проблемы, меня главным образом зацепило то, что ничего не могу найти на этот счет в документации. Ведь если URI - это Uniform Resource Identifier, то идентифицировать-то оно должно по полному адресу запроса, т.е. содержать в REQUEST_URI /articles.php?id=1
        В смысле - мол, ну какой же это REQUEST_URI, если это скорее SCRIPT_FILENAME или REQUEST_FILENAME

        Лично мне это важно выяснить поскольку возможности для отладки правил m_r крайне скудны.




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

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