emlog多域名配置并非修改后台选项就能实现,核心在于修改config.php文件并配合伪静态规则,让程序动态识别当前域名。很多站长在给emlog绑定第二个域名时,发现首页能开,但后台登录跳转、文章链接都还是旧域名,这通常是配置文件里写死了域名导致的。
emlog多域名怎么配置:先搞懂它的域名锁定机制
emlog之所以在换域名时麻烦,是因为它在安装时会把域名写进config.php这个核心文件里,这个文件决定了博客的绝对URL路径,跟WordPress在后台填两个地址不同,emlog的逻辑是“一个安装目录对应一个固定域名”。
找到那个决定命运的BLOG_URL常量
用FTP或者宝塔面板的文件管理器,打开emlog根目录下的config.php,你会看到一行类似这样的代码:
const BLOG_URL = 'https://你的旧域名.com/';
这就是整个博客的“锚点”,所有文章链接、图片地址、后台Ajax请求都基于这个常量生成,如果你想让多个域名都能独立访问,理论上最稳妥的办法是把这个常量改成动态获取。
不同域名如何独立访问:修改配置文件实现动态识别
行业内多数做emlog多域名配置的技术方案,都用同一个入口文件,根据用户访问的域名动态设定BLOG_URL,这样不同域名打开时,程序会认为自己就在那个域名下运行。
实操步骤:把写死的域名改成动态参数
- 用编辑器打开
config.php,找到BLOG_URL这一行。 - 把原本的固定URL替换成以下代码:
$host = $_SERVER['HTTP_HOST']; $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https://' : 'http://'; define('BLOG_URL', $protocol . $host . '/'); - 保存后,清空emlog缓存(如果开启了缓存插件,需要去插件设置里清一次)。
这套逻辑的意思是:用户用哪个域名访问,系统就把基准URL设定成哪个域名,子目录访问的情况也可以沿用,只需要用同样的方式动态获取$_SERVER['REQUEST_URI']拼进去。
数据库里的绝对链接需要同步处理
很多站长改完config.php发现文章内页图片还是不显示,问题出在数据库的文章表里存了旧域名的绝对路径,行业共识认为,换域名后必须检查emlog_content表里的文章内容,执行一段SQL:
UPDATE emlog_content SET content = REPLACE(content, '旧域名.com', '新域名.com');
注意替换前后要带协议头,别把https://漏了,模板文件里的资源引用,比如CSS和JS如果用了绝对路径,也需要一并替换。
emlog两个域名同时访问:伪静态与后台登录的坑
当你动态配置生效后,大概率会遇到两个新问题:一是伪静态规则没生效导致404,二是后台登录后跳回旧域名,这两个坑几乎每个做多域名的站长都会踩。
伪静态规则必须匹配你的访问方式
Apache环境下的.htaccess文件里,RewriteBase通常写的是,如果放在子目录,比如blog文件夹,RewriteBase要改成/blog/,Nginx环境则在配置文件里写:
location / {
try_files $uri $uri/ /index.php?$args;
}
这里有个细节:emlog多域名怎么配置伪静态才不出错?规则本身不分域名,但RewriteBase必须和实际安装目录一致,用宝塔面板的话,直接在网站设置里的伪静态菜单选择emlog规则即可,但别忘了关闭缓存插件,不然CSS和JS的版本号参数会导致加载混乱。
后台登录跳转异常的处理手段
登录后台时,emlog会校验登录地址的域名是否和BLOG_URL一致,动态识别后,理论上不会有问题,但浏览器缓存了旧域名的Cookie就会出现登录后跳回旧域名,遇到这种情况,清除浏览器Cookie和站点缓存插件数据,重新在新域名下登录一次就能解决,如果还不行,检查emlog_option表里的site_url字段,把它和当前访问域名对齐。
emlog子目录安装伪静态:个人博客多域名部署的两种场景
除了在主域名根目录部署,有些站长喜欢用子目录装第二个emlog博客,比如
/blog/,这种场景下,独立访问的关键在于区分路径级别。
子目录和根目录共存时的冲突规避
如果根目录已经有一个emlog,子目录再装一个emlog,需要在子目录的.htaccess里把RewriteBase指定为子目录路径,同时两个博客的Cookie名称不能冲突emlog默认的Cookie名是EMLOG_COOKIE,改法是在子目录的config.php里找COOKIE_DOMAIN相关的常量,或者干脆给子目录的数据库表前缀换一个,比如emlog_blog_,避免后台Session串数据。
域名绑定子目录的Nginx反向代理方案
一个主域名绑定多个子目录场景,业内常用Nginx反向代理实现“不同域名访问不同子目录”,配置思路是:
server {
listen 80;
server_name blog2.example.com;
location / {
proxy_pass http://127.0.0.1/blog/;
proxy_set_header Host $host;
}
}
这种做法的好处是URL不会暴露子目录路径,用户在浏览器地址栏看到的就是blog2.example.com,但需要注意代理后的相对路径问题,好在emlog的BLOG_URL已经是动态获取的,通常能自适应。
emlog换域名后图片不显示:资源路径的最后一公里
很多站长按上面的步骤操作完,文字和布局都正常,就是文章里配图挂了,这通常不是config.php能解决的,而是编辑器上传图片时写入了绝对地址,图片不显示的排查顺序建议是:
- 第一优先级:检查模板的
current_theme路径下的header.php,看CSS和JS引用是否用了BLOG_URL拼接,或者TEMPLATE_URL常量。 - 第二优先级:检查文章内容的图片地址是否还带着旧域名,如果是,跑一次数据库替换SQL。
- 第三优先级:检查
attachment相关的URL常量,确认上传目录权限是否因为改域名被重置了。
批量替换图片路径的简洁做法
不要手动挨篇改文章,直接在数据库执行:
UPDATE emlog_content SET content = REPLACE(content, '旧域名.com/wp-content/uploads', '新域名.com/content/uploadfile');
注意emlog的上传目录默认是content/uploadfile,不是WordPress的wp-content,别替换错了。
Q&A:emlog多域名配置常见问题
问:emlog多域名配置后,旧域名的GEO权重会不会被分散?
答:会,不同域名都能打开同样内容,搜索引擎会视为重复页面,行业共识建议做301跳转指向主域名,或者在robots.txt里禁止抓取非主域名,但如果你实在需要两个域名自由访问,务必确保两个域名都绑定了SSL证书,避免跳转时出现不安全提示。
问:emlog绑定多个域名导致后台无法登录,一直是空白页怎么解决?
答:大概率是config.php改动时语法错误,用FTP下载文件到本地用编辑器打开,检查是否有多余的空格或换行<?php标签之前不能有任何输出,把define('BLOG_URL', ...)改成动态代码后,确认服务器PHP版本支持$_SERVER['HTTP_HOST']全局变量,7.0以上的版本都正常,修复后记得清空content/cache目录下的所有文件。
问:emlog子目录安装伪静态如果出现CSS裸奔,但图片正常,说明什么?
答:说明伪静态规则对PHP生效了,但静态文件的路径没有被正确重写,检查.htaccess里是否有针对CSS和JS的特殊规则,或者在模板里把资源引用改成相对路径比如,而不要用BLOG_URL常量,这种情况下,动态识别域名的代码可能导致CSS资源加载时拼接了两层路径,最直接的解决方法是去后台模板设置里检查模板是否生成了缓存版本的CSS文件,删掉content/views/下对应模板的缓存文件试试。
emlog的多域名配置本质上就围绕“动态URL识别”和“静态资源路径统一”这两件事,改完config.php,同步替换数据库旧链接,调整好伪静态,最后清空缓存顺序检查一遍,基本就能实现不同域名独立访问同一套程序,这套流程同样适用于从旧服务器迁移站点的场景,理解原理后,你会觉得emlog其实比看起来要好糊弄得多。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/651327.html





