比方说,我有以下自己的文档根等子域:
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字段并更改它们,以便客户端将继续与代理而不是后端服务器交谈。
ProxyPass和ProxyPassReverse不能在.htaccess文件中 – 所以用你的当前重写规则代替你的<VirtualHost>块中的子域:
ProxyPass / http://193.159.3.129/ ProxyPassReverse / http://193.159.3.129/
.htaccess :不要使用.htaccess当你可以避免它。 查看关于此事的Apache文档 。
一般来说,只有当您无法访问主服务器configuration文件时,才应该使用.htaccess文件。