Apache下.htaccess重写Joomla域名 保留目录与地址栏URL
实现Joomla站点域名迁移且保留原URL显示的Apache .htaccess方案
首先得明确你的核心需求:用户访问原域名时,实际加载新服务器上的Joomla内容,但地址栏始终显示原域名,同时Joomla用相对URL不会调用新域名。这个需求可以通过反向代理+Host头处理来实现,下面是具体步骤和代码:
前提准备
确保你的Apache服务器已经启用了以下模块:
mod_rewrite(必选,处理URL重写)mod_proxy和mod_proxy_http(必选,实现反向代理)
步骤1:配置新服务器的站点接受原域名请求
在新服务器的Apache虚拟主机配置(或站点根目录的.htaccess)中,允许原域名作为合法的Host头访问。如果用.htaccess,添加这段规则:
# 允许原域名的Host请求,确保Joomla能正确识别 RewriteCond %{HTTP_HOST} ^your-old-domain\.com$ [NC] RewriteRule ^ - [L]
或者在Apache的虚拟主机配置里添加ServerAlias your-old-domain.com,这样新服务器的站点会同时响应原域名和新域名的请求。
步骤2:原域名服务器的.htaccess反向代理规则
如果原域名的DNS已经指向新服务器,直接在站点根目录的.htaccess里添加以下规则;如果原服务器还在运行,就把这段规则放在原服务器的.htaccess中,将请求代理到新服务器:
RewriteEngine On # 处理HTTP请求:将原域名的所有请求代理到新域名对应路径 RewriteCond %{HTTP_HOST} ^your-old-domain\.com$ [NC] RewriteCond %{REQUEST_URI} !^/\.htaccess$ # 排除对.htaccess本身的请求 RewriteRule ^(.*)$ http://your-new-domain.com/$1 [P,L] # 处理HTTPS请求(如果原域名使用HTTPS,确保新服务器也支持HTTPS) RewriteCond %{HTTPS} on RewriteCond %{HTTP_HOST} ^your-old-domain\.com$ [NC] RewriteRule ^(.*)$ https://your-new-domain.com/$1 [P,L]
[P]标记告诉Apache使用反向代理,将请求转发到目标URL[L]标记表示这是最后一条规则,停止后续处理
步骤3:Joomla配置调整
打开Joomla根目录的configuration.php文件,确保以下配置正确:
public $live_site = '';(留空,让Joomla自动根据当前请求的Host生成相对链接)- 确保数据库中没有硬编码的新域名链接(如果之前有绝对URL,可能需要批量替换,但你说用相对URL,这一步应该可以跳过)
关键说明
- 反向代理会让用户的浏览器始终显示原域名,而实际内容来自新服务器,完美维护SEO排名
- 因为Joomla使用相对URL,加上我们让它识别到的Host是原域名,所以生成的所有链接都是相对路径,不会出现新域名
- 测试时要注意:访问原域名的任意页面,检查地址栏是否不变,页面内容是否正确,点击内部链接是否仍保持原域名
内容的提问来源于stack exchange,提问作者Henrik Juul-Nyholm
相关产品推荐
相关产品推荐

