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

时间:2016-01-22 19:13:57

标签: apache mod-proxy

我在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>

2 个答案:

答案 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