配置.htaccess实现多域名反向代理至WordPress实例
解决方案
你的现有配置逻辑错误——当前规则是匹配当前域名下的/berlin/路径进行代理,而不是根据不同的请求域名对应到主站的子路径。以下是正确的配置方案:
1. 修正.htaccess代理规则
将你的.htaccess替换为以下内容,针对不同域名做定向代理:
RewriteEngine On # 处理 vssp-wp-berlin.de 代理到 vssp-wp.de/berlin/ RewriteCond %{HTTP_HOST} ^vssp-wp-berlin\.de$ [NC] RewriteRule ^(.*)$ http://vssp-wp.de/berlin/$1 [L,P] ProxyPassReverse / http://vssp-wp.de/berlin/ # 处理 vssp-wp-bayern.de 代理到 vssp-wp.de/bayern/ RewriteCond %{HTTP_HOST} ^vssp-wp-bayern\.de$ [NC] RewriteRule ^(.*)$ http://vssp-wp.de/bayern/$1 [L,P] ProxyPassReverse / http://vssp-wp.de/bayern/ # 主域名 vssp-wp.de 正常访问(可根据需要调整) RewriteCond %{HTTP_HOST} ^vssp-wp\.de$ [NC] RewriteRule ^(.*)$ - [L]
配置说明:
RewriteCond %{HTTP_HOST} ^域名$:判断当前请求的域名,[NC]表示忽略大小写RewriteRule ^(.*)$ 目标路径/$1 [L,P]:将当前域名下的所有请求,代理到主站对应子路径,[P]启用代理,[L]终止后续规则ProxyPassReverse / 目标路径/:修正代理响应中的URL,确保WordPress生成的链接指向原域名而非主站路径
2. WordPress 后台适配配置
仅靠Apache代理还不够,WordPress会根据自身配置生成链接,需要确保后台输出的URL是原域名:
方法1:修改wp-config.php
在wp-config.php中添加动态判断代码,根据请求域名设置站点URL:
$current_host = $_SERVER['HTTP_HOST']; switch($current_host) { case 'vssp-wp-berlin.de': define('WP_SITEURL', 'http://vssp-wp-berlin.de'); define('WP_HOME', 'http://vssp-wp-berlin.de'); break; case 'vssp-wp-bayern.de': define('WP_SITEURL', 'http://vssp-wp-bayern.de'); define('WP_HOME', 'http://vssp-wp-bayern.de'); break; default: define('WP_SITEURL', 'http://vssp-wp.de'); define('WP_HOME', 'http://vssp-wp.de'); break; }
方法2:使用过滤器(推荐)
如果不想修改wp-config.php,可以在主题的functions.php中添加过滤器:
add_filter('site_url', 'custom_proxy_site_url', 10, 3); add_filter('home_url', 'custom_proxy_home_url', 10, 3); function custom_proxy_site_url($url, $path, $scheme) { $current_host = $_SERVER['HTTP_HOST']; if ($current_host === 'vssp-wp-berlin.de') { return str_replace('vssp-wp.de', 'vssp-wp-berlin.de', $url); } elseif ($current_host === 'vssp-wp-bayern.de') { return str_replace('vssp-wp.de', 'vssp-wp-bayern.de', $url); } return $url; } function custom_proxy_home_url($url, $path, $scheme) { return custom_proxy_site_url($url, $path, $scheme); }
3. 验证Apache模块
确保主机商已启用以下Apache模块:
mod_rewrite:URL重写必备mod_proxy:代理功能核心mod_proxy_http:HTTP代理支持
你提到主机商支持原生代理标志,这部分应该已满足,但如果仍有问题可联系主机商确认。
内容的提问来源于stack exchange,提问作者CodeDude
相关产品推荐
相关产品推荐

