mod_rewrite 未添加 REDIRECT_URL 环境变量

mod_rewrite 未添加 REDIRECT_URL 环境变量

我们基于 Zend Framework 运行一个站点,使用 apache httpd (2.2) 以mod_rewrite实现 SEO 和易用性 URL:s。最近,我们添加了mod_proxy(和mod_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.comRewriteRule具体来说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

因为只有 vhost 存在问题,所以external我们假设是mod_proxymod_rewrite组合存在问题。有什么想法吗?

问候

答案1

我绝不是专家,但我必须将 [OR] 添加到我的文件中。如所述这里

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

答案2

我不知道这是否适用于您的应用程序,但您不能使用它的内容$_SERVER["REQUEST_URI"]吗?

答案3

您是否尝试过类似这样的事情:

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

基本上,这个想法就是从一个环境中拾起它,然后将其推到下一个环境中。不确定这是否可行,但尝试一下也无妨。

答案4

我相信我们通过升级 Zend Framework 解决了这个问题,更高版本不依赖于 REQUEST_URL。看来 REQUEST_URL 的行为会根据安装的模块而有所不同。请参阅此邮件列表主题

相关内容