我有这个 vhost 配置,但是“重定向”部分似乎不起作用。是错误的吗?
<VirtualHost *:80>
ServerAlias in.example.com
ProxyRequests Off
ProxyVia Off
ProxyPass / http://127.0.0.1:9091/
ProxyPassReverse / http://127.0.0.1:9091/
Redirect permanent / http://in.example.com/web/
</VirtualHost>
答案1
您无法通过 ProxyPass / 和重定向 /。我猜您想要做的是将所有请求通过 ProxyPass 发送到您的本地应用程序,如果返回 404 Not Found,则将它们重定向到其他地方。
不幸的是,如果您在 127.0.0.1:9091 上的应用程序返回 404,那么它将返回给您的客户端。
相反,您需要“取消代理”您的应用将提供的路径。您可以通过两种方式执行此操作:
- 仅为已知路径创建 ProxyPass 规则:
例如:
ProxyPass /myapp http://localhost:9091
2. 创建排除:
例如:
ProxyPass / http://localhost:9091
ProxyPass /notmyapp !
ProxyPass /images !
这将使/notmyapp
并/images
传递到重定向
答案2
由于它提供重定向,因此可能mod_alias
无法加载。但是,您会在日志中看到配置错误。
您的 ProxyPass 和 ProxyPassReverse 指令也可能优先。如果您打算重定向,则应将规则放在代理服务器上,或删除代理指令。代理将通过 301 重定向。
此外,如果你将 / 重定向到其自身的子目录,则会创建一个重定向循环。从文档:任何以 URL-path 开头的请求都会将重定向请求返回到目标 URL 位置的客户端。匹配的 URL-path 之外的其他路径信息将附加到目标 URL。这意味着当浏览器跟进对 /web/ 的请求时,它将重定向到http://in.example.com/web/web/等等。考虑改用带有锚定正则表达式的 RedirectMatch。如果您说不起作用是指浏览器抱怨重定向循环,那么这就是答案。