来自域 + 路径的 Apache 重定向请求

Apache Redirect Request From Domain + Path

我在 tomcat 前面使用 apache,因此我可以使用 mod_proxy 将请求从域重定向到 tomcat url。我已经 运行 遇到服务器上的一个问题,即在使用子域时它想要返回到基本域。有什么方法可以将所有请求从 example.com/foo 重定向到 foo.example.com?

<VirtualHost *:80>
ServerName example.com/app
ProxyPreserveHost Off
ProxyPass / http://app.example.com:8080/AppName/
ProxyPassReverse / http://app.example.com:8080/AppName/
</VirtualHost>

上面的例子是行不通的。我想那是因为我不能在服务器名中包含路径。

这是我基于已接受答案的标签的工作版本。

<VirtualHost *:80>
ServerName example.com/app
ProxyPreserveHost Off
ProxyPass / http://app.example.com:8080/AppName/
ProxyPassReverse / http://app.example.com:8080/AppName/

# Rewrite all request from example.com/foo to foo.example.com
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^/foo/?(.*) http://foo.example.com/ [R,L]
</VirtualHost>

您可以在 apache 中使用 mod_rewrite。确保它已启用,作为 root:

a2enmod rewrite

这将确认它是否已启用或已经启用。如果它已启用,您将需要重新启动 Apache。

然后在你的虚拟主机 create/edit .htaccess 文件的根目录中添加行:

Redirect /foo/ http://foo.example.com/

根据您的特定目录权限,您可能需要允许覆盖目录

<Directory /your/path/here>
  AllowOverride All
</Directory>

HTH

严格按照您原文中的最后一句话说话post,"Is there any way to redirect all requests from example.com/foo to foo.example.com"。

您可以使用重写来完成此操作。例如:

RewriteCond %{HTTP_HOST}^example\.com$ [NC]
重写规则 ^/foo/?(.*) http://foo.example.com/$1 [R,L]

这假定您的重写模块已加载并启用:

LoadModule rewrite_module modules/mod_rewrite.so
重写引擎开启