Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache重写规则代理不遵循重定向_Apache_.htaccess_Redirect_Mod Rewrite_Mod Proxy - Fatal编程技术网

Apache重写规则代理不遵循重定向

Apache重写规则代理不遵循重定向,apache,.htaccess,redirect,mod-rewrite,mod-proxy,Apache,.htaccess,Redirect,Mod Rewrite,Mod Proxy,我正在尝试将Apache2.4配置为使用mod_proxy作为反向代理,但在没有从源服务器传递到客户端的重定向方面遇到了问题 我在虚拟主机配置中具有以下配置: [...] ProxyPreserveHost On # ProxyPass "/" "http://old.domain.tld/" ProxyPassReverse "/" "http://old.domain.tld/" [...] 在虚拟主机配置中使用注释掉的ProxyPass指令时,一切正常。这意味着来自源服务器的30倍重

我正在尝试将Apache2.4配置为使用mod_proxy作为反向代理,但在没有从源服务器传递到客户端的重定向方面遇到了问题

我在虚拟主机配置中具有以下配置:

[...]
ProxyPreserveHost On
# ProxyPass  "/" "http://old.domain.tld/"
ProxyPassReverse  "/" "http://old.domain.tld/"
[...]
在虚拟主机配置中使用注释掉的ProxyPass指令时,一切正常。这意味着来自源服务器的30倍重定向被正确重写并转发到客户端

在配置ProxyPass-in.htaccess时(我需要它,因为这只会在某些情况下发生),反向代理工作正常,只是它不处理任何到客户端的重定向

我有以下访问权限:

RewriteEngine On
RewriteRule ^(.*)$ http://old.domain.tld/$1 [P]
现在,当源服务器发送30倍重定向时,我总是在客户端中找到一个404-not

在代理服务器日志中,我可以看到以下跟踪:

[...] strip per-dir prefix: /[...]/domain.tld/htdocs/ ->
[...] applying pattern '^(.*)$' to uri ''
[...] rewrite '' -> 'http://old.domain.tld/'
[...] escaped URI in per-dir context for proxy, http://old.domain.tld/ -> http://old.domain.tld/
[...] forcing proxy-throughput with http://old.domain.tld/
[...] go-ahead with proxy request proxy:http://old.domain.tld/ [OK]
客户端将获得以下传递的头:

HTTP/1.1 404 Not Found
Date: Fri, 25 Nov 2016 14:04:23 GMT
Server: Apache/2
Content-Length: 1060
Content-Type: text/html; charset=utf-8
Keep-Alive: timeout=5, max=100
Proxy-Connection: Keep-alive
我不明白为什么Apache或mod_rewrite/mod_proxy在.htaccess中配置时没有转发正确的重定向

有什么解决办法吗?还是我做错了什么


谢谢。

proxypass将其spected反转以处理重定向,这样原始服务器就不会将客户端带到代理之外

此指令允许Apache调整位置中的URL, HTTP重定向响应上的内容位置和URI头。这是 当Apache用作反向代理(或网关)以避免 由于后端上的HTTP重定向而绕过反向代理 保留在反向代理后面的服务器

只有上面特别提到的HTTP响应头才会被删除 重写。Apache不会重写其他响应头,也不会重写 重写HTML页面内的URL引用。这意味着如果 代理内容包含绝对URL引用,它们将绕过 代理第三方模块,可查看HTML内部并重写 URL引用是Nick Kew的mod_proxy_html


ProxyPassReverse将其spected用于处理重定向,以便源服务器不会将客户端带到代理之外

此指令允许Apache调整位置中的URL, HTTP重定向响应上的内容位置和URI头。这是 当Apache用作反向代理(或网关)以避免 由于后端上的HTTP重定向而绕过反向代理 保留在反向代理后面的服务器

只有上面特别提到的HTTP响应头才会被删除 重写。Apache不会重写其他响应头,也不会重写 重写HTML页面内的URL引用。这意味着如果 代理内容包含绝对URL引用,它们将绕过 代理第三方模块,可查看HTML内部并重写 URL引用是Nick Kew的mod_proxy_html