SLES 11 + Apache + mod_rewrite = магия. Помогите разобраться

d0ct0r

Новичок
Дано:
SLES 11
Apache 2.2.10 + mod_rewrite

Файл .htaccess:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^mw\/(.*)$ \/mwGate.php?$1 [L,QSA]
</IfModule>
Скрипт:
PHP:
trigger_error(json_encode($_REQUEST),E_USER_NOTICE);
Разумеется в оригинале он более функционален :) В данном виде он просто делает запись в серверный лог.

Суть:
По идее все должно работать, и работает на нескольких тестовых и разработческих стендах и на SLES и на Centos. Проблема материализовалась на боевом сервере как всегда в самый неподходящий момент :)

Проблема:
Запрос: http://someDomain.host/mw/article/countries/bar_chart/2011-06-05T00:00:00Z/2011-08-04T00:00:00Z
Результат: в переменной $_REQUEST лежит [] (массив).

Запрос: http://someDomain.host/mw/article/countries/pie/2011-06-05T00:00:00Z/2011-08-04T00:00:00Z
Результат: в переменной $_REQUEST лежит {"article\/tone\/bar_chart\/2011-06-05T00:00:00Z\/2011-08-04T00:00:00Z":""}

Запрос: http://someDomain.host/mw/article/tone/bar_chart/2011-06-05T00:00:00Z/2011-08-04T00:00:00Z
Результат: так же все в порядке, в $_REQUEST ложится {"article\/tone\/bar_chart\/2011-06-05T00:00:00Z\/2011-08-04T00:00:00Z":""}

Так же для отладки включено логирование.
RewriteLog "/www/logs/rw.mod_rewrite.log"
RewriteLogLevel 5
Судя по логу, все работает абсолютно идентично (см. в самый низ).

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

Задача: Мне необходимо хотя бы банально локализовать проблему. Я голову сломал, не могу даже предположить в чем именно заключается сбой именно в данной конфигурации. Буду признателен за любой совет или предположение в чем может заключаться проблема.


x.x.x.x - - [05/Aug/2011:12:48:16 +0400] [someDomain.host/sid#7f42fd5a9c10][rid#7f42fd8343f8/initial] (3) [perdir /somePath/] add path info postfix: /somePath/mw -> /somePath/mw/article/countries/bar_chart/2011-06-05T00:00:00Z/2011-08-04T00:00:00Z
x.x.x.x - - [05/Aug/2011:12:48:16 +0400] [someDomain.host/sid#7f42fd5a9c10][rid#7f42fd8343f8/initial] (3) [perdir /somePath/] strip per-dir prefix: /somePath/mw/article/countries/bar_chart/2011-06-05T00:00:00Z/2011-08-04T00:00:00Z -> mw/article/countries/bar_chart/2011-06-05T00:00:00Z/2011-08-04T00:00:00Z
x.x.x.x - - [05/Aug/2011:12:48:16 +0400] [someDomain.host/sid#7f42fd5a9c10][rid#7f42fd8343f8/initial] (3) [perdir /somePath/] applying pattern '^mw\/(.*)$' to uri 'mw/article/countries/bar_chart/2011-06-05T00:00:00Z/2011-08-04T00:00:00Z'
x.x.x.x - - [05/Aug/2011:12:48:16 +0400] [someDomain.host/sid#7f42fd5a9c10][rid#7f42fd8343f8/initial] (2) [perdir /somePath/] rewrite 'mw/article/countries/bar_chart/2011-06-05T00:00:00Z/2011-08-04T00:00:00Z' -> '/mwGate.php?article/countries/bar_chart/2011-06-05T00:00:00Z/2011-08-04T00:00:00Z'
x.x.x.x - - [05/Aug/2011:12:48:16 +0400] [someDomain.host/sid#7f42fd5a9c10][rid#7f42fd8343f8/initial] (3) split uri=/mwGate.php?article/countries/bar_chart/2011-06-05T00:00:00Z/2011-08-04T00:00:00Z -> uri=/mwGate.php, args=article/countries/bar_chart/2011-06-05T00:00:00Z/2011-08-04T00:00:00Z
x.x.x.x - - [05/Aug/2011:12:48:16 +0400] [someDomain.host/sid#7f42fd5a9c10][rid#7f42fd8343f8/initial] (1) [perdir /somePath/] internal redirect with /mwGate.php [INTERNAL REDIRECT]
x.x.x.x - - [05/Aug/2011:12:48:16 +0400] [someDomain.host/sid#7f42fd5a9c10][rid#7f42fd831cb8/initial/redir#1] (3) [perdir /somePath/] strip per-dir prefix: /somePath/mwGate.php -> mwGate.php
x.x.x.x - - [05/Aug/2011:12:48:16 +0400] [someDomain.host/sid#7f42fd5a9c10][rid#7f42fd831cb8/initial/redir#1] (3) [perdir /somePath/] applying pattern '^mw\/(.*)$' to uri 'mwGate.php'
x.x.x.x - - [05/Aug/2011:12:48:16 +0400] [someDomain.host/sid#7f42fd5a9c10][rid#7f42fd831cb8/initial/redir#1] (1) [perdir /somePath/] pass through /somePath/mwGate.php
x.x.x.x - - [05/Aug/2011:12:48:16 +0400] [someDomain.host/sid#7f42fd5a9c10][rid#7f42fd981868/initial] (3) [perdir /somePath/] strip per-dir prefix: /somePath/favicon.ico -> favicon.ico
x.x.x.x - - [05/Aug/2011:12:48:16 +0400] [someDomain.host/sid#7f42fd5a9c10][rid#7f42fd981868/initial] (3) [perdir /somePath/] applying pattern '^mw\/(.*)$' to uri 'favicon.ico'
x.x.x.x - - [05/Aug/2011:12:48:16 +0400] [someDomain.host/sid#7f42fd5a9c10][rid#7f42fd981868/initial] (1) [perdir /somePath/] pass through /somePath/favicon.ico

x.x.x.x - - [05/Aug/2011:12:48:43 +0400] [someDomain.host/sid#7f42fd5a9c10][rid#7f42fddf2318/initial] (3) [perdir /somePath/] add path info postfix: /somePath/mw -> /somePath/mw/article/countries/pie/2011-06-05T00:00:00Z/2011-08-04T00:00:00Z
x.x.x.x - - [05/Aug/2011:12:48:43 +0400] [someDomain.host/sid#7f42fd5a9c10][rid#7f42fddf2318/initial] (3) [perdir /somePath/] strip per-dir prefix: /somePath/mw/article/countries/pie/2011-06-05T00:00:00Z/2011-08-04T00:00:00Z -> mw/article/countries/pie/2011-06-05T00:00:00Z/2011-08-04T00:00:00Z
x.x.x.x - - [05/Aug/2011:12:48:43 +0400] [someDomain.host/sid#7f42fd5a9c10][rid#7f42fddf2318/initial] (3) [perdir /somePath/] applying pattern '^mw\/(.*)$' to uri 'mw/article/countries/pie/2011-06-05T00:00:00Z/2011-08-04T00:00:00Z'
x.x.x.x - - [05/Aug/2011:12:48:43 +0400] [someDomain.host/sid#7f42fd5a9c10][rid#7f42fddf2318/initial] (2) [perdir /somePath/] rewrite 'mw/article/countries/pie/2011-06-05T00:00:00Z/2011-08-04T00:00:00Z' -> '/mwGate.php?article/countries/pie/2011-06-05T00:00:00Z/2011-08-04T00:00:00Z'
x.x.x.x - - [05/Aug/2011:12:48:43 +0400] [someDomain.host/sid#7f42fd5a9c10][rid#7f42fddf2318/initial] (3) split uri=/mwGate.php?article/countries/pie/2011-06-05T00:00:00Z/2011-08-04T00:00:00Z -> uri=/mwGate.php, args=article/countries/pie/2011-06-05T00:00:00Z/2011-08-04T00:00:00Z
x.x.x.x - - [05/Aug/2011:12:48:43 +0400] [someDomain.host/sid#7f42fd5a9c10][rid#7f42fddf2318/initial] (1) [perdir /somePath/] internal redirect with /mwGate.php [INTERNAL REDIRECT]
x.x.x.x - - [05/Aug/2011:12:48:43 +0400] [someDomain.host/sid#7f42fd5a9c10][rid#7f42fd834b60/initial/redir#1] (3) [perdir /somePath/] strip per-dir prefix: /somePath/mwGate.php -> mwGate.php
x.x.x.x - - [05/Aug/2011:12:48:43 +0400] [someDomain.host/sid#7f42fd5a9c10][rid#7f42fd834b60/initial/redir#1] (3) [perdir /somePath/] applying pattern '^mw\/(.*)$' to uri 'mwGate.php'
x.x.x.x - - [05/Aug/2011:12:48:43 +0400] [someDomain.host/sid#7f42fd5a9c10][rid#7f42fd834b60/initial/redir#1] (1) [perdir /somePath/] pass through /somePath/mwGate.php
x.x.x.x - - [05/Aug/2011:12:48:43 +0400] [someDomain.host/sid#7f42fd5a9c10][rid#7f42fd8283a8/initial] (3) [perdir /somePath/] strip per-dir prefix: /somePath/favicon.ico -> favicon.ico
x.x.x.x - - [05/Aug/2011:12:48:43 +0400] [someDomain.host/sid#7f42fd5a9c10][rid#7f42fd8283a8/initial] (3) [perdir /somePath/] applying pattern '^mw\/(.*)$' to uri 'favicon.ico'
x.x.x.x - - [05/Aug/2011:12:48:43 +0400] [someDomain.host/sid#7f42fd5a9c10][rid#7f42fd8283a8/initial] (1) [perdir /somePath/] pass through /somePath/favicon.ico


x.x.x.x - - [05/Aug/2011:12:49:05 +0400] [someDomain.host/sid#7f42fd5a9c10][rid#7f42fd83ceb8/initial] (3) [perdir /somePath/] add path info postfix: /somePath/mw -> /somePath/mw/article/tone/bar_chart/2011-06-05T00:00:00Z/2011-08-04T00:00:00Z
x.x.x.x - - [05/Aug/2011:12:49:05 +0400] [someDomain.host/sid#7f42fd5a9c10][rid#7f42fd83ceb8/initial] (3) [perdir /somePath/] strip per-dir prefix: /somePath/mw/article/tone/bar_chart/2011-06-05T00:00:00Z/2011-08-04T00:00:00Z -> mw/article/tone/bar_chart/2011-06-05T00:00:00Z/2011-08-04T00:00:00Z
x.x.x.x - - [05/Aug/2011:12:49:05 +0400] [someDomain.host/sid#7f42fd5a9c10][rid#7f42fd83ceb8/initial] (3) [perdir /somePath/] applying pattern '^mw\/(.*)$' to uri 'mw/article/tone/bar_chart/2011-06-05T00:00:00Z/2011-08-04T00:00:00Z'
x.x.x.x - - [05/Aug/2011:12:49:05 +0400] [someDomain.host/sid#7f42fd5a9c10][rid#7f42fd83ceb8/initial] (2) [perdir /somePath/] rewrite 'mw/article/tone/bar_chart/2011-06-05T00:00:00Z/2011-08-04T00:00:00Z' -> '/mwGate.php?article/tone/bar_chart/2011-06-05T00:00:00Z/2011-08-04T00:00:00Z'
x.x.x.x - - [05/Aug/2011:12:49:05 +0400] [someDomain.host/sid#7f42fd5a9c10][rid#7f42fd83ceb8/initial] (3) split uri=/mwGate.php?article/tone/bar_chart/2011-06-05T00:00:00Z/2011-08-04T00:00:00Z -> uri=/mwGate.php, args=article/tone/bar_chart/2011-06-05T00:00:00Z/2011-08-04T00:00:00Z
x.x.x.x - - [05/Aug/2011:12:49:05 +0400] [someDomain.host/sid#7f42fd5a9c10][rid#7f42fd83ceb8/initial] (1) [perdir /somePath/] internal redirect with /mwGate.php [INTERNAL REDIRECT]
x.x.x.x - - [05/Aug/2011:12:49:05 +0400] [someDomain.host/sid#7f42fd5a9c10][rid#7f42fd82eb50/initial/redir#1] (3) [perdir /somePath/] strip per-dir prefix: /somePath/mwGate.php -> mwGate.php
x.x.x.x - - [05/Aug/2011:12:49:05 +0400] [someDomain.host/sid#7f42fd5a9c10][rid#7f42fd82eb50/initial/redir#1] (3) [perdir /somePath/] applying pattern '^mw\/(.*)$' to uri 'mwGate.php'
x.x.x.x - - [05/Aug/2011:12:49:05 +0400] [someDomain.host/sid#7f42fd5a9c10][rid#7f42fd82eb50/initial/redir#1] (1) [perdir /somePath/] pass through /somePath/mwGate.php
x.x.x.x - - [05/Aug/2011:12:49:06 +0400] [someDomain.host/sid#7f42fd5a9c10][rid#7f42fd83aea8/initial] (3) [perdir /somePath/] strip per-dir prefix: /somePath/favicon.ico -> favicon.ico
x.x.x.x - - [05/Aug/2011:12:49:06 +0400] [someDomain.host/sid#7f42fd5a9c10][rid#7f42fd83aea8/initial] (3) [perdir /somePath/] applying pattern '^mw\/(.*)$' to uri 'favicon.ico'
x.x.x.x - - [05/Aug/2011:12:49:06 +0400] [someDomain.host/sid#7f42fd5a9c10][rid#7f42fd83aea8/initial] (1) [perdir /somePath/] pass through /somePath/favicon.ico
Понятное дело что на обработку запроса favicon.ico можно не обращать внимания.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
1. "пустая" - баночка с кремом у блондинки, программист должен писать точно.
json_encode - не средство для генерации логов, используй var_dump($_REQUEST,true) - будет виден тип данных, а это важно, пустой массив там, или что

2. угадать никто не сможет
воспроизведи ошибку на скрипте, который делает только var_dump($_REQUEST), без инициализаций и инклюдов и проверь.
вероятно, кто-то где-то переписывает $_REQUEST

если воспроизводится -
3. собери apache/php из исходников в другой папке, запусти на другом порту/ip и воспроизведи
 

d0ct0r

Новичок
1. В данном случае json_encode вполне подходит. Как раз таки в примере видно, что в одном случае есть пустой массив, а в другом массив содержит элемент, с той самой частью запроса, которая должна передаваться согласно правилу. var_dump попробовал конечно для очистки совести и на всякий случай, но картины это ни коим образом не изменило.
2. Вы не поверите, в данной ситуации я закоментил весь остальной код и оставил первой строчкой ту которую привел тут. Не надо считать людей глупее себя :)
3. Все же есть надежда обойтись меньшей кровью. Попробую, если не получится придумать что-либо еще. Да и честно говоря переустановку/пересборку и прочие кардинальные приемы предпочитаю применять в крайних случаях, важно понять что именно происходит и выяснить почему.

Спасибо за замечания и вариант.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
ну, раз подходит - то разбирайся сам
 

phprus

Moderator
Команда форума
А откуда ставился Apache и его зависимости?
Может для начала стоит сравнить версии Apache и зависимостей (так как я не помню где apache берет библиотеку для парсинга регулярных выражений) на проблемном и рабочем сервере?
 
Сверху