我有一个网站,其中使用 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
答案3
尝试这个:
RewriteCond %{HTTP_HOST} ^subdomain.examle.com$
RewriteRule subdomain.example.com/CONTROL/(.*) http://www.example.com/$1 [P]