我在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>
上面的例子不起作用。我认为这是因为我不能在servername中包含路径。
以下是基于接受答案的标签的工作版本。
<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/$1 [R,L]
</VirtualHost>
答案 0 :(得分:0)
你可以在apache中使用mod_rewrite。确保以root身份启用它:
using System;
using System.Text;
using System.IO;
using System.Windows.Forms;
namespace ConsoleRedirection
{
public class TextBoxStreamWriter : TextWriter
{
TextBox _output = null;
public TextBoxStreamWriter(TextBox output)
{
_output = output;
}
public override void Write(char value)
{
base.Write(value);
_output.AppendText(value.ToString());
}
public override void Write(string value)
{
_output.AppendText(value);
}
public override Encoding Encoding
{
get { return Encoding.UTF8; }
}
}
}
这将确认它已启用或已经启用。如果已启用,则需要重新启动Apache。
然后在虚拟主机的根目录中创建/编辑a2enmod rewrite
文件并添加以下行:
.htaccess
根据您的特定目录权限,您可能需要允许覆盖目录
Redirect /foo/ http://foo.example.com/
HTH
答案 1 :(得分:0)
严格地说明原始帖子中的最后一句话,“有没有办法将所有请求从example.com/foo重定向到foo.example.com”。
您可以使用重写来完成此任务。例如:
RewriteCond%{HTTP_HOST} ^ example \ .com $ [NC]
RewriteRule ^ / foo /?(。*)http://foo.example.com/ $ 1 [R,L]
这假设您的重写模块已加载并启用:
LoadModule rewrite_module modules / mod_rewrite.so
RewriteEngine On