apache2 强制代理子域名上的特定网址

apache2 强制代理子域名上的特定网址

我有一个网站,其中使用 mod_rewrite 的动态虚拟子域,定义如下:

<VirtualHost *:80>
    ServerName    example.com
    ServerAlias    *.example.com

    DocumentRoot    /var/www/example.com/www

    RewriteEngine    on
    RewriteCond    %{HTTP_HOST}    ^[^.]+\.examle.com$
    RewriteRule    ^(.+)            %{HTTP_HOST}$1    [C]

    RewriteRule    ^([^.]+)\.example.com(.*)    /var/www/example.com/$1$2

</VirtualHost>

问题是我想要一个特定的 url,比如 subdomain.example.com/CONTROL/ 使用代理(而不是 url 重定向)指回 www.example.com/。

我曾尝试添加:

RewriteRule ^([^.]+)\.example.com/CONTROL(.*)    /var/www/example.com/www$2 [P]

但那没用。有什么想法吗?

答案1

来自重写规则文档章节[P]

您必须确保替换字符串是有效的 URI(通常以 http://主机名) 可以由 Apache 代理模块处理。

尝试:

RewriteEngine on
RewriteCond   %{HTTP_HOST}              ^subdomain.examle.com$
# [L] means stop processing after this rule
RewriteRule   ^/CONTROL/(.*)            http://www.example.com/$1 [P,L]

RewriteCond   %{HTTP_HOST}              ^[^.]+\.examle.com$
RewriteRule   ^(.+)                      %{HTTP_HOST}$1

RewriteRule   ^([^.]+)\.example.com(.*) /var/www/example.com/$1$2

确保已加载代理模块。如果遇到问题,请使用以下命令启用详细日志记录:

RewriteLog      /path/to/rewrite.log
RewriteLogLevel 9

答案2

你需要有一个重写条件对于 HTTP_HOST

重写规则应用于URL 路径仅有的!

答案3

尝试这个:

RewriteCond    %{HTTP_HOST}    ^subdomain.examle.com$
RewriteRule subdomain.example.com/CONTROL/(.*) http://www.example.com/$1 [P]

相关内容