- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 mod_proxy 配置 Apache 2.4 作为反向代理,但我遇到了重定向未从源服务器传递到客户端的问题。
我在虚拟主机配置中有如下配置:
[...]
ProxyPreserveHost On
# ProxyPass "/" "http://old.domain.tld/"
ProxyPassReverse "/" "http://old.domain.tld/"
[...]
在虚拟主机配置中使用注释掉的 ProxyPass 指令时,一切正常。这意味着来自源服务器的 30 倍重定向被正确重写并转发给客户端。
在 .htaccess 中配置 ProxyPass 时(我需要它,因为这只应在特定条件下发生),反向代理工作正常,只是它不处理任何到客户端的重定向。
我有以下 .htaccess:
RewriteEngine On
RewriteRule ^(.*)$ http://old.domain.tld/$1 [P]
现在,当源服务器发送 30x-Redirect 时,我总是会收到 404 - not found in client。
在代理服务器日志中,我可以看到以下痕迹:
[...] 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]
客户端获取以下传递的 header :
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 中配置时没有转发正确的重定向。
有什么解决办法吗?还是我做错了什么?
谢谢。
最佳答案
ProxyPassReverse 其指定处理重定向,因此源服务器不会将客户端带到代理之外。
This directive lets Apache adjust the URL in the Location, Content-Location and URI headers on HTTP redirect responses. This is essential when Apache is used as a reverse proxy (or gateway) to avoid bypassing the reverse proxy because of HTTP redirects on the backend servers which stay behind the reverse proxy.
Only the HTTP response headers specifically mentioned above will be rewritten. Apache will not rewrite other response headers, nor will it rewrite URL references inside HTML pages. This means that if the proxied content contains absolute URL references, they will bypass the proxy. A third-party module that will look inside the HTML and rewrite URL references is Nick Kew's mod_proxy_html.
关于Apache RewriteRule 代理不遵循重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40807260/
将所有页面从旧域移动到新域时,我注意到有些人添加了 ^ 而其他不在 rewriterule 中 之间有什么不同 RewriteRule ^(.*)$ http://mynewdomain.com/$1
我正在尝试重写通过 BrowserSync 代理加载的站点的 HTML。 我有一个: ./src/search.txt -- 包含正则表达式匹配 ./build/replace.txt -- 包含网页
我正在尝试使用 mod_proxy 配置 Apache 2.4 作为反向代理,但我遇到了重定向未从源服务器传递到客户端的问题。 我在虚拟主机配置中有如下配置: [...] ProxyPreserveH
我对 apache2 进行了重写,以便根请求 "www.example.com"从缓存加载内容,但所有其他带参数的请求正常通过index.php "www.example.com/?action=1"
有没有办法在 .htaccess 中放置一个小的重写规则,以将超过 20.000 个链接从旧的基于 phpBB 的论坛重定向到新的 phpBB 论坛?旧链接是这样的: https://example.
我为我的页面设计了两个不同的 RewriteRules: # Enable URL Rewriting RewriteEngine on # exclude followed stuff Rewrit
我在通过 HTTP 主机名选择目录时遇到问题。 我有这样的文件结构: . +-- .htaccess +-- domains +-- 123456.a12.whatever.net |
我正在尝试通过 RewriteRule 创建一个友好的 URL但它一直忽略 #作为变量值的一部分。 .htaccess 上的行就这么简单 RewriteRule ^key/(.+)/$ index.p
我正在尝试创建一个 URL 短对于我的网站,任何请求到 example.com/u/* 应该改写为 example.com/cpp-cgi-test.cgi?* ! 注意:目录 /u 不存在,我将它添
当人们输入时,我想重定向到 new/index.php site.com site.com/index.php site.com/index.html site.com/index.htm 那么下面的
我正在对我的网站的新版本进行编程,并且我正在尝试让 .htaccess 正确重写。我的新网站存储在这里: www.example.com/storage/new/ 我需要重写这些 URL: www.e
在 Apache 2.4 中通过 ReWriteRule (mod_rewrite) 代理时无法控制超时。 ServerName xxxx Use ssl RewriteEngine O
标题基本概括了所有内容。 :-)我有很多虚拟主机,并且我想在httpd.conf文件的顶部放置一个重写块,以重写URL,无论请求可能指向哪个虚拟主机。我该怎么办? 我找到了this,但我的问题是相同的
目前我有一个文件夹 [contact-us] mydomain.com/contact-us/ 我计划删除此文件夹并仅添加 contact-us.php mydomain.com/contact-us
基本上我有下面的 htaccess。目前它运行良好,但它会重定向每个文件。例如,当我只想将 about.php 重定向到/about 时,foo.php 到/foo。基本上,我想强制删除 about.
RewriteCond %{QUERY_STRING} ^id=(.*)$ RewriteRule ^oldpage\.php$ http://new-site.com/newpage-%1 [R=
我有一台具有一个 IP 地址的虚拟服务器,为几个不同的站点提供服务。其中之一带有 SSL 证书。 我需要在第二个域上添加 SSL 证书供我自己私有(private)使用,由于我只有一个 IP 地址,所
我的网站根目录中有一个 .htaccess,如下所示: RewriteEngine On RewriteCond %{HTTP_HOST} !^www\.mydomain\.pl [NC] Rewri
我有一个服务器,我想强制与外部世界进行 https 通信,但是,服务器上的某些服务需要由本地服务器上的进程通过 http 访问。 我尝试了以下方法: RewriteEngine On RewriteC
我在 apache 服务器上设置了一个站点,其中桌面站点位于/public_html 中,移动站点位于/public_html/mob 我正在尝试设置一个 .htaccess 重写规则,以便在用户访问
我是一名优秀的程序员,十分优秀!