The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"mod_rewrite - странность с %{REQUEST_URI}"
Вариант для распечатки  
Пред. тема | След. тема 
Форум WEB технологии (Модули apache)
Изначальное сообщение [ Отслеживать ]

"mod_rewrite - странность с %{REQUEST_URI}"  +/
Сообщение от reivaX (ok) on 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 часть, получается, отбрасывается.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "mod_rewrite - странность с %{REQUEST_URI}"  +/
Сообщение от Pahanivo (ok) on 05-Мрт-11, 17:41 
а что параллельно говорит access.log ? :)
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "mod_rewrite - странность с %{REQUEST_URI}"  +/
Сообщение от reivaX (ok) on 05-Мрт-11, 23:25 
> а что параллельно говорит access.log ? :)

А, что и должен, по типу:
127.0.0.1 - - [05/Mar/2011:15:44:09 +0200] "GET /articles.php?id=134 HTTP/1.1" 404 210
127.0.0.1 - - [05/Mar/2011:15:50:25 +0200] "GET /articles.php?id=134 HTTP/1.1" 404 210

Файла нету, да и быть не обязан.

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

2. "mod_rewrite - странность с %{REQUEST_URI}"  +/
Сообщение от Aquarius (ok) on 05-Мрт-11, 19:09 
> Что-то никак не могу нарыть в документации: возникла элементарная задача при запросе
> /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 часть, получается, отбрасывается.

а маскировать ничего не надо?

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

4. "mod_rewrite - странность с %{REQUEST_URI}"  +/
Сообщение от reivaX (ok) on 05-Мрт-11, 23:33 
> а маскировать ничего не надо?

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

Но в данном случае роли никакой не играет - это я еще на Мастерхосте сперва мучился, там маскировать пробовал по всякому, а потом на локале тестировать начал, т.к. зацепило, а на мастерхосте не логируется 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

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

5. "mod_rewrite - странность с %{REQUEST_URI}"  +/
Сообщение от Aquarius (ok) on 06-Мрт-11, 02:57 
>[оверквотинг удален]
> 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

ну так и почувствуйте разницу: точки, пробелы, слэши и вопросительный знак замаскированы

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "mod_rewrite - странность с %{REQUEST_URI}"  +/
Сообщение от Aquarius (ok) on 06-Мрт-11, 02:59 
>> а маскировать ничего не надо?
> Не уверен - там же типа лексическое равенство, эт опытно проверить надо,
> в принципе.
> ...
> А вот как приходит в "правильной" проверке через %{THE_REQUEST}
> ...

ну так и почувствуйте разницу: точки, пробелы, слэши и вопросительный знак замаскированы

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

8. "mod_rewrite - странность с %{REQUEST_URI}"  +/
Сообщение от reivaX (ok) on 06-Мрт-11, 23:11 
> ну так и почувствуйте разницу: точки, пробелы, слэши и вопросительный знак замаскированы

у вас просто повысказываться потребность существует?

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



Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

7. "mod_rewrite - странность с %{REQUEST_URI}"  +/
Сообщение от zoonman (ok) on 06-Мрт-11, 17:45 
> Что-то никак не могу нарыть в документации: возникла элементарная задача при запросе
> /articles.php?id=1 сделать внешний редирект.

А что-то в articles.php мешает дописать следующее

if ($_GET['id'] == 1) {
header("Location: http://opennet.ru/");
}

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

10. "mod_rewrite - странность с %{REQUEST_URI}"  +/
Сообщение от zoonman (ok) on 06-Мрт-11, 23:25 
Если задача решена, то какой смысл в применении mod_rewrite? Спортивный интерес?
Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

11. "mod_rewrite - странность с %{REQUEST_URI}"  +/
Сообщение от reivaX (ok) on 07-Мрт-11, 00:00 
> Если задача решена, то какой смысл в применении mod_rewrite? Спортивный интерес?

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

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

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

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

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

Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

12. "mod_rewrite - странность с %{REQUEST_URI}"  +/
Сообщение от zoonman (ok) on 07-Мрт-11, 00:45 
> [perdir /var/www/htdocs/] RewriteCond: input='/articles.php' pattern='=/articles.php?id=1'

Шаблон со знаком равно подставляется.


А так срабатывает?

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

13. "mod_rewrite - странность с %{REQUEST_URI}"  +/
Сообщение от zoonman (ok) on 07-Мрт-11, 01:18 
Заинтересовали вы меня)))

RewriteEngine on

RewriteCond %{REQUEST_URI} /articles.php
RewriteCond %{QUERY_STRING} id=1
RewriteRule (.*)    1.php

Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

14. "mod_rewrite - странность с %{REQUEST_URI}"  +/
Сообщение от reivaX (ok) on 07-Мрт-11, 01:56 
> Заинтересовали вы меня)))
> 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 крайне скудны.

Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

15. "mod_rewrite - странность с %{REQUEST_URI}"  +/
Сообщение от zoonman (ok) on 07-Мрт-11, 08:43 
Согласно RFC http://www.ietf.org/rfc/rfc3986.txt URI должен нести в себе даже адрес фрагмента, но передача его на сервер не производится браузерами.

Согласно описания структуры struct request_rec (778 строка)
http://svn.apache.org/viewvc/httpd/httpd/branches/2.2.x/incl...

/** The path portion of the URI, or "/" if no path provided */
946     char *uri;

/** The QUERY_ARGS extracted from this request */
955     char *args;

Судя по всему mod_rewrite и использует вот эту трактовку REQUEST_URI.

Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

16. "mod_rewrite - странность с %{REQUEST_URI}"  +/
Сообщение от reivaX (ok) on 07-Мрт-11, 12:53 

> Судя по всему mod_rewrite и использует вот эту трактовку REQUEST_URI.

Спасибо! В сырцы заглянуть как-то и не подумалось

Ответить | Правка | ^ к родителю #15 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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