- 跳转到另一个独立的手机网站域名(
m.yourdomain.com),这是最推荐、最规范的方式,有利于SEO和移动端体验的优化。 - 在同一个域名下,自动切换到移动端模板,这种方式实现起来更简单,但SEO方面不如第一种方式。
下面我将详细介绍这两种方法的实现步骤。
跳转到独立的手机网站域名(推荐)
这种方法的核心思想是:用户通过手机访问主域名(如 www.yourdomain.com),服务器检测到是移动设备后,自动将用户重定向到手机子域名(如 m.yourdomain.com)。
实现步骤:
第一步:准备移动网站
- 创建手机网站目录:在你的网站根目录下,创建一个新文件夹,
m。 - 复制和修改文件:
- 将你织梦网站根目录下的
include、templets、plus等核心文件夹复制到m目录中。 - 将
m目录下的templets文件夹中的所有模板文件替换为你专门为手机设计的模板文件。
- 将你织梦网站根目录下的
- 修改配置文件:
- 进入
m目录,找到data文件夹,将common.inc.php复制一份为config_m.inc.php。 - 重要:为了防止主站和手机站的数据库配置冲突,你需要修改
config_m.inc.php文件,将数据库连接信息(如果主站和手机站使用不同数据库)或一些变量(如cfg_cmspath)进行区分,如果使用同一个数据库,通常只需确保模板路径正确即可。
- 进入
- 配置手机站栏目和内容:
登录织梦后台,在“频道管理”中,你可能需要为手机站单独设置栏目,或者通过模板判断来显示不同的内容,最简单的方式是让手机站和主站共享内容,只是通过不同的模板来展示。
第二步:设置域名解析
在你的域名服务商(如阿里云、腾讯云等)后台,为 m.yourdomain.com 这个子域名添加一个 A 记录,指向你网站服务器的IP地址。
第三步:设置服务器重定向规则
这是最关键的一步,通过服务器脚本来判断用户设备并跳转,请根据你的服务器环境选择以下一种方法:
A. Apache服务器(.htaccess)
在网站根目录(www 目录)下找到或创建 .htaccess 文件,添加以下代码:
# 启用Rewrite引擎
RewriteEngine On
# 定义移动设备正则表达式(可根据需要增删)
RewriteCond %{HTTP_USER_AGENT} "android|blackberry|ipad|iphone|ipod|iemobile|opera mobile|palm|googlebot-mobile" [NC]
# 如果访问的不是手机站域名
RewriteCond %{HTTP_HOST} !^m\.yourdomain\.com [NC]
# 则重定向到手机站域名
RewriteRule ^(.*)$ http://m.yourdomain.com/$1 [L,R=302]
代码解释:
RewriteCond: 设置重定向的条件。%{HTTP_USER_AGENT}: 获取用户的浏览器代理字符串,判断是否为移动设备。!^m\.yourdomain\.com: 确保当前访问的域名不是手机站域名,防止无限循环跳转。RewriteRule: 执行重定向。[L]: Last rule,如果此规则匹配,则停止处理后续规则。[R=302]: 临时重定向,对SEO友好,如果确定要长期使用手机站,可以改为[R=301](永久重定向)。
B. Nginx服务器(nginx.conf)
在你的网站 server 配置块中添加以下代码:
server {
listen 80;
server_name www.yourdomain.com yourdomain.com;
# ... 其他主站配置 ...
# 定义移动设备正则表达式
if ($http_user_agent ~* "android|blackberry|ipad|iphone|ipod|iemobile|opera mobile|palm|googlebot-mobile") {
# 如果访问的不是手机站域名,则重定向
if ($host !~* "^m\.yourdomain\.com") {
rewrite ^(.*)$ http://m.yourdomain.com/$1 permanent;
}
}
# ... 其他主站配置 ...
}
代码解释:
$http_user_agent: Nginx变量,对应Apache的%{HTTP_USER_AGENT}。- 表示不区分大小写的正则匹配。
$host: 获取当前访问的域名。permanent: 表示301永久重定向。
C. PHP脚本(通用方法)
如果无法修改服务器配置,可以在织梦的全局头部模板 head.htm 或 index.php 的最顶部加入PHP代码。
-
在
head.htm中添加: 打开/templets/default/head.htm文件,在<head>标签之前加入以下代码:<?php // 获取User-Agent $user_agent = $_SERVER['HTTP_USER_AGENT']; // 定义移动设备关键词 $mobile_agents = array("android", "blackberry", "ipad", "iphone", "ipod", "iemobile", "opera mobile", "palm", "googlebot-mobile"); // 检查是否为移动设备 $is_mobile = false; foreach ($mobile_agents as $device) { if (strpos($user_agent, $device) !== false) { $is_mobile = true; break; } } // 如果是移动设备且当前域名不是手机站,则跳转 if ($is_mobile && $_SERVER['HTTP_HOST'] != 'm.yourdomain.com') { header("Location: http://m.yourdomain.com".$_SERVER['REQUEST_URI']); exit(); } ?> -
在
index.php中添加: 打开网站根目录的index.php文件,在require_once (dirname(__FILE__) . "/include/common.inc.php");这行代码之前加入上面的PHP代码。
同一域名下切换移动端模板
这种方法不改变域名,服务器只根据用户设备加载不同的模板文件。
实现步骤:
第一步:准备移动端模板
- 在
templets目录下创建一个新文件夹,mobile。 - 将
default目录下的模板文件(如index.htm,list.htm,article.htm等)复制到mobile文件夹中。 - 修改
mobile文件夹里的模板,使其适应手机屏幕。
第二步:修改织梦核心文件
我们需要修改织梦的模板引擎,让它能根据设备自动选择模板文件夹。
-
修改
include/arc.class.php文件:- 打开
include/arc.class.php。 - 找到
function GetTempletsDir()函数(通常在文件末尾)。 - 将整个函数替换为以下代码:
// 获取模板目录 function GetTempletsDir() { // 检测是否为移动设备 if ($this->IsMobile()) { // 定义移动端模板目录 $templetdir = DEDEROOT . '/templets/mobile/'; // 如果移动端模板文件存在,则使用它 if (is_dir($templetdir)) { return $templetdir; } } // 否则使用默认模板目录 return DEDEROOT . '/templets/' . $this->typeid ? $this->typeid : $this->templet; } // 检测是否为移动设备 function IsMobile() { // 如果有GET参数 mobile=no,则强制不使用移动端模板 if (isset($_GET['mobile']) && $_GET['mobile'] == 'no') { return false; } // 如果有GET参数 mobile=yes,则强制使用移动端模板 if (isset($_GET['mobile']) && $_GET['mobile'] == 'yes') { return true; } // 正则表达式匹配常见的移动设备User-Agent $mobile_browser = Array( "android", "avantgo", "blackberry", "blazer", "compal", "elaine", "fennec", "hiptop", "iphone", "ipod", "ipad", "iris", "kindle", "lg-", "lge ", "maemo", "mmp ", "mobi", "mot ", "netfront", "opera mobi", "opera mini", "palm", "phone", "pocket", "psp", "symbian", "treo", "up.browser", "up.link", "vodafone", "wap", "windows ce" ); if (preg_match("/(" . implode('|', $mobile_browser) . ")/i", $_SERVER['HTTP_USER_AGENT'])) { return true; } if (strpos(strtolower($_SERVER['HTTP_ACCEPT']), "application/vnd.wap.xhtml+xml") !== false) { return true; } if ((isset($_SERVER['HTTP_X_WAP_PROFILE']) || isset($_SERVER['HTTP_PROFILE']))) { return true; } if (in_array(strtolower(substr($_SERVER['HTTP_USER_AGENT'], 0, 4)), array("acer", "acs-", "alav", "amoi", "aste", "au-", "avan", "benq", "bird", "blac", "blaz", "brew", "brav", "brew", "casio", "cell", "cldc", "cmd-", "dang", "doco", "eric", "hipt", "htc_", "inno", "ipaq", "ipod", "jigs", "kddi", "keji", "leno", "lg-c", "lg-d", "lg-g", "lge-", "lg/u", "maui", "maxo", "midp", "mits", "mmef", "mobi", "mot ", "moto", "mwbp", "nec-", "newt", "noki", "palm", "pana", "pant", "phil", "play", "port", "prox", "qwap", "sage", "sams", "sany", "sch-", "sec-", "send", "seri", "sgh-", "shar", "sie-", "siem", "smal", "smar", "sony", "sph-", "symb", "t-mo", "teli", "tim-", "tosh", "tsm-", "upg1", "upsi", "vk-v", "voda", "wap-", "wapa", "wapi", "wapp", "wapr", "webc", "winw", "winw", "xda", "xda-" ))) { return true; } return false; } - 打开
-
修改
include/arc.partview.class.php文件(可选,但推荐):- 打开
include/arc.partview.class.php。 - 找到
function GetTempletsDir()函数。 - 替换为与上面
arc.class.php中相同的GetTempletsDir()函数代码,确保栏目页、首页等也能正确切换模板。
- 打开
第三步:测试
当你用手机访问网站时,织梦会自动调用 templets/mobile/ 目录下的模板,如果你想强制用电脑版访问,可以在网址后加 ?mobile=no;如果想强制用手机版,可以加 ?mobile=yes。
总结与对比
| 特性 | 方法一(独立域名) | 方法二(同一域名) |
|---|---|---|
| SEO | 极佳,搜索引擎明确知道 m 域名是移动版本,有利于移动端SEO。 |
一般,搜索引擎可能需要时间识别同一域名下的不同版本,且可能存在内容重复问题。 |
| 开发维护 | 较复杂,需要维护两套完整的网站结构。 | 简单,只需维护一套内容,两套模板。 |
| 用户体验 | 优秀,可以针对移动端做深度优化,如独立的功能和布局。 | 良好,可以快速适配移动端显示。 |
| 技术实现 | 依赖服务器重定向(.htaccess或Nginx配置)。 |
修改织梦核心文件,通用性强。 |
| 推荐度 | ★★★★★ (强烈推荐) | ★★★☆☆ (适合快速实现、预算有限的情况) |
最终建议:
如果你的网站对SEO和用户体验要求较高,强烈推荐使用方法一,这是目前行业内的最佳实践,如果只是做一个简单的展示型网站,或者不想投入太多精力维护两套系统,方法二也是一个可行的快速解决方案。
