有没有办法将apache2中的路径重定向到另一个虚拟主机

时间:2011-07-08 16:34:04

标签: mod-rewrite apache2 mod-wsgi virtualhost

我在一台机器上运行了几个虚拟主机,我想覆盖从一个虚拟主机到另一个虚拟主机的一条路径。我最初的计划是使用mod重写,但我被困在绝对URL上。

我想要以下行为,(不使用301重定向。):

http://sub1.example.com/sub2 -> sub2.example.com virtual host
# Everything but sub2/.*
http://sub1.example.com/     -> sub1.example.com virtual host
http://sub2.example.com/     -> sub2.example.com virtual host

我使用以下配置测试了这个:

<VirtualHost *:80>
  <Directory /var/lib/wsgi>
    Order allow,deny
    Allow from all
   </Directory>

   ServerName sub1.example.com
   WSGIScriptAlias / /var/lib/wsgi/sub1.wsgi
   WSGIDaemonProcess sub1 display-name=%{GROUP}
   WSGIProcessGroup sub1

   RewriteEngine on
   RewriteRule ^/sub2/(.*)$ http://sub2.example.com/sub2/$1 [PT]

</VirtualHost>

<VirtualHost *:80>
  <Directory /var/lib/wsgi>
    Order allow,deny
    Allow from all
   </Directory>

   ServerName sub2.example.com
   WSGIScriptAlias / /var/lib/wsgi/sub2.wsgi
   WSGIDaemonProcess sub2 display-name=%{GROUP}
   WSGIProcessGroup sub2
</VirtualHost>

我在每个子域中运行Python WSGI应用程序。当您访问http://sub1.example.com/sub2时,apache2返回“400 Bad Request”并将其放入日志文件中。

[Fri Jul 08 16:09:05 2011] [error] [client 127.0.0.1] Invalid URI in request GET /sub2/ HTTP/1.1

我也尝试在sub2域中使用ServerPath,但这也不起作用。

1 个答案:

答案 0 :(得分:1)

如果您没有进行任何网址修改/花式匹配,为什么不尝试

<VirtualHost ...>
    // sub1 site
    Redirect /sub2 http://sub2.example.com
</VirtualHost>
当你真正需要的只是一个豌豆射手时,mod_rewrite是重型火炮。

那,或使用别名:

Alias /sub2   /full/path/to/equivalent/directory/in/sub2