URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 6240
[ Назад ]

Исходное сообщение
"mod_rewrite: не изменяется переменная окружения REQUEST_URI"

Отправлено Nas_tradamus , 05-Мрт-09 12:53 
Здравствуйте, коллеги!

Пытаюсь красивые URL'ы в блогах Битрикса через wildcard dns и mod_rewrite. Не получается сделать переопределение переменной окружения сервера после редиректа:

   RewriteEngine On
   RewriteCond %{REQUEST_URI} !^/information/blogs/index.php?(.*)?$
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{HTTP_HOST} ^([^\.]+)\.(mirror1\.mysite\.ru$) [NC]
   RewriteCond %1 !^(www|ftp|mail)$ [NC]
   RewriteRule ^(.*)$ /information/blogs/index.php?page=blog&blog=%1 [E=REQUEST_URI :/information/blogs/index.php,L]

В результате, происходит редирект, но REQUEST_URI не меняется. В результате, скрипты Битрикса выводят биллиберду из главной странички сайта + результат вывода нужного скрипта.

Помогите, пожалуйста, решить проблему. Уже 3 дня парюсь...



Содержание

Сообщения в этом обсуждении
"mod_rewrite: не изменяется переменная окружения REQUEST_URI"
Отправлено Pahanivo , 05-Мрт-09 14:26 
как ты видишь что не меняется?



"mod_rewrite: не изменяется переменная окружения REQUEST_URI"
Отправлено Nas_tradamus , 05-Мрт-09 14:28 
>как ты видишь что не меняется?

Через phpinfo();


"mod_rewrite: не изменяется переменная окружения REQUEST_URI"
Отправлено Pahanivo , 05-Мрт-09 15:33 
>>как ты видишь что не меняется?
>
>Через phpinfo();

если ты смотришь после редиректа в том скрипте куда был редирект там естно будет другой URI


"mod_rewrite: не изменяется переменная окружения REQUEST_URI"
Отправлено Nas_tradamus , 05-Мрт-09 16:13 
>>>как ты видишь что не меняется?
>>
>>Через phpinfo();
>
>если ты смотришь после редиректа в том скрипте куда был редирект там
>естно будет другой URI

А как его изменить?
Изложу суть проблемы подробней:

Нужно сделать с помощью mod_rewrite так, чтобы url вида http://user.mirror1.mysite.ru открывал физический скрипт
http://mirror1.mysite.ru/information/blogs/index.php?page=bl... .

Например, когда я открываю в браузере http://test.mirror1.mysite.ru/, в .htaccess у меня происходит внутренний редирект на физический url http://mirror1.mysite.ru/test/test2/index.php.
В скрипте вывожу переменные окружения и наблюдаю картину:

REDIRECT_URL     /
REQUEST_URI     /

Соответственно, запросы QUERY_STRING идут напрямую в корневой /index.php. В результате, вместо блогов у меня выводится главная страничка сайта, а под ней уже блоги.

Если запустить скрипт напрямую: http://mirror1.mysite.ru/test/test2/index.php, то видим:
REQUEST_URI  /test/test2/index.php

Получается, что блоги "глючат" из-за того, что используют переменную окружения REQUEST_URI, передаваемую Апачем. Как переделать этот самый REQUEST_URI - непонятно.


"mod_rewrite: не изменяется переменная окружения REQUEST_URI"
Отправлено Nas_tradamus , 12-Мрт-09 17:58 
Решил проблему следующим образом, благодаря тех. поддежрке Битрикса:

Содержимое .htaccess:
--------
  RewriteEngine On
  RewriteBase /

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{HTTP_HOST} ^([^\.]+)\.(mirror1\.mysite\.ru$) [NC]
  RewriteCond %1 !^(www|ftp|mail|mirror1)$ [NC]
  RewriteRule ^/?$ /information/blogs/index.php?page=blog&blog=%1 [E=REQUEST_URI:/information/blogs/index.php?page=blog&blog=%1,QSA,L]

# Далее идет правило, нужное только Битриксу.
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-l
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$
  RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]

--------

Все это верно, но не будет работать. Почему?
Дело в том, что Apache 2.x преобразует имена переменных, дописывая: "REDIRECT_"(кто же знал?).

Поэтому, дописал в dbconn.php (скрипт инициализации Битрикса) такую строчку:
----
if ($_SERVER["REDIRECT_REQUEST_URI"])
        $_SERVER["REQUEST_URI"] = $_SERVER["REDIRECT_REQUEST_URI"];

----


Всем спасибо за внимание. Надеюсь, мой опыт кому-нибудь пригодится.


"mod_rewrite: не изменяется переменная окружения REQUEST_URI"
Отправлено Ян , 31-Май-11 01:26 
реально, пригодилось)
весь инет перерыл, пока не нашел здесь решение такой же проблемы для joomla. спасибо!)