Назад | Перейти на главную страницу

mod_rewrite не добавляет переменную среды REDIRECT_URL

Мы запускаем сайт на базе Zend Framework, используя apache httpd (2.2) с mod_rewrite для SEO и удобного использования URL: s. Недавно мы добавили mod_proxymod_proxy_balancer, mod_proxy_http, mod_rpaf) для настройки виртуального хоста балансировщика нагрузки.

Теперь наша установка выглядит так:

external.site.com (vhost on server1.site.com with reverse proxy)
|-internal1.site.com (vhost on server1.site.com) 
|-internal2.site.com (vhost on server2.site.com)

куда internal1 & internal2 обслуживает большую часть динамического контента и external обслуживает статический контент плюс некоторые страницы типа администратора. Все хосты имеют одинаковый код и .htaccess настроить.

Проблема в том, что на external.site.com в RewriteRule не добавляет правильные заголовки в среду запроса, в частности REDIRECT_URL от которого мы и ZendFramework зависим. Все работает нормально для запросов, которые перенаправляются на внутренние хосты.

Соответствующие части httpd.conf:

<VirtualHost *:80>
  ServerName external.site.com
  DocumentRoot /opt/www/htdocs/
  CustomLog "/var/log/httpd-proxy-access.log" combined

  <Proxy balancer://backend/>
    Balancermember http://internal1.site.com
    Balancermember http://internal2.site.com
    ProxySet lbmethod=byrequests
  </Proxy>
  ProxyRequests Off
  <Proxy *>
    Order deny,allow
    Allow from all
  </Proxy>
  ProxyPass /static/ !
  ProxyPass /config/ !
  ProxyPass / balancer://backend/
  ProxyPassReverse / balancer://backend/
</VirtualHost>
<VirtualHost *:80>
  ServerName internal1.site.com

  RPAFenable On
  RPAFproxy_ips 127.0.0.1
</VirtualHost>

Из .htaccess файл:

RewriteEngine on 
RewriteCond %{REQUEST_URI} !^.*robots.txt
RewriteCond %{REQUEST_URI} !^.*/static/.*
  RewriteRule .* index.php [L]

php_flag magic_quotes_gpc off 
php_flag register_globals off

Потому что проблема только в external vhost мы предполагаем, что это проблема с mod_proxy и mod_rewrite сочетание. Любые идеи?

С уважением

Я считаю, что мы решили эту проблему, обновив Zend Framework, более поздние версии не зависят от REQUEST_URL. Похоже, REQUEST_URL имеет разное поведение в зависимости от установленных модулей. Видеть эта ветка списка рассылки

Вы пробовали что-то вроде:

RewriteRule .* index.php [L,E=REQUEST_URL:$ENV{'REQUEST_URL'}]

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

Я не знаю, применимо ли это к вашему приложению или нет, но вы не могли использовать содержимое $_SERVER["REQUEST_URI"] вместо?

Я ни в коем случае не эксперт, но мне пришлось поставить [ИЛИ] в свой файл. Как указано Вот

RewriteEngine on 
RewriteCond %{REQUEST_URI} !^.*robots.txt [OR]
RewriteCond %{REQUEST_URI} !^.*/static/.*
RewriteRule .* index.php [L]