通过htaccess / apache代理所有的子域名请求到一个IP

比方说,我有以下自己的文档根等子域:

monad2.mysite.com 

我希望所有的请求代理到一个IP(例如193.159.3.129 ),但他们必须通过mysite.com服务器(假设monad2在同一台服务器上)。

我有以下(htaccess)configuration工作到子域,但无法代理任何其他请求…

 Options +FollowSymLinks RewriteEngine on RewriteRule (.*) http://193.159.3.129/$1 [P] 

我的问题是,虽然它的工作http://monad2.mysite.com/a.php保持不变),它不能与http://monad2.mysite.com/a/b (url转换为http://193.159.3.129/a/b )。 请注意,后面的地址显示了代理服务器的目录列表,除了子域更改为ip之外,这是正确的。

另外,我认为这个系统肯定不适用于HTTPS请求,对吗?

编辑:经过一些更多的疑难解答,我已经find问题的确切时间。 每当我试图访问一个没有最后一个斜杠的目录,代理服务器就会失败,最后我得到一个IP。 一些例子:

 Original | Result --------------------------------+-------------------------------- http://monad2.mysite.com | http://monad2.mysite.com http://monad2.mysite.com/a/ | http://monad2.mysite.com/a/ http://monad2.mysite.com/a | http://193.159.3.129/a/ <- ! http://monad2.mysite.com/a.php | http://monad2.mysite.com/a.php 

您需要ProxyPassReverse – 它捕获响应标头中的Location字段并更改它们,以便客户端将继续与代理而不是后端服务器交谈。

ProxyPassProxyPassReverse不能在.htaccess文件中 – 所以用你的当前重写规则代替你的<VirtualHost>块中的子域:

 ProxyPass / http://193.159.3.129/ ProxyPassReverse / http://193.159.3.129/ 

.htaccess :不要使用.htaccess当你可以避免它。 查看关于此事的Apache文档 。

一般来说,只有当您无法访问主服务器configuration文件时,才应该使用.htaccess文件。