来自域 + 路径的 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
重写引擎开启
我在 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
重写引擎开启