手机访问织梦如何自动跳转?

99ANYc3cd6
预计阅读时长 30 分钟
位置: 首页 织梦建站 正文
  1. 跳转到另一个独立的手机网站域名m.yourdomain.com),这是最推荐、最规范的方式,有利于SEO和移动端体验的优化。
  2. 在同一个域名下,自动切换到移动端模板,这种方式实现起来更简单,但SEO方面不如第一种方式。

下面我将详细介绍这两种方法的实现步骤。


跳转到独立的手机网站域名(推荐)

这种方法的核心思想是:用户通过手机访问主域名(如 www.yourdomain.com),服务器检测到是移动设备后,自动将用户重定向到手机子域名(如 m.yourdomain.com)。

实现步骤:

第一步:准备移动网站

  1. 创建手机网站目录:在你的网站根目录下,创建一个新文件夹,m
  2. 复制和修改文件
    • 将你织梦网站根目录下的 includetempletsplus 等核心文件夹复制到 m 目录中。
    • m 目录下的 templets 文件夹中的所有模板文件替换为你专门为手机设计的模板文件。
  3. 修改配置文件
    • 进入 m 目录,找到 data 文件夹,将 common.inc.php 复制一份为 config_m.inc.php
    • 重要:为了防止主站和手机站的数据库配置冲突,你需要修改 config_m.inc.php 文件,将数据库连接信息(如果主站和手机站使用不同数据库)或一些变量(如 cfg_cmspath)进行区分,如果使用同一个数据库,通常只需确保模板路径正确即可。
  4. 配置手机站栏目和内容

    登录织梦后台,在“频道管理”中,你可能需要为手机站单独设置栏目,或者通过模板判断来显示不同的内容,最简单的方式是让手机站和主站共享内容,只是通过不同的模板来展示。

第二步:设置域名解析

在你的域名服务商(如阿里云、腾讯云等)后台,为 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.htmindex.php 的最顶部加入PHP代码。

  1. 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();
    }
    ?>
  2. index.php 中添加: 打开网站根目录的 index.php 文件,在 require_once (dirname(__FILE__) . "/include/common.inc.php"); 这行代码之前加入上面的PHP代码。


同一域名下切换移动端模板

这种方法不改变域名,服务器只根据用户设备加载不同的模板文件。

实现步骤:

第一步:准备移动端模板

  1. templets 目录下创建一个新文件夹,mobile
  2. default 目录下的模板文件(如 index.htm, list.htm, article.htm 等)复制到 mobile 文件夹中。
  3. 修改 mobile 文件夹里的模板,使其适应手机屏幕。

第二步:修改织梦核心文件

我们需要修改织梦的模板引擎,让它能根据设备自动选择模板文件夹。

  1. 修改 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;
    }
  2. 修改 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和用户体验要求较高,强烈推荐使用方法一,这是目前行业内的最佳实践,如果只是做一个简单的展示型网站,或者不想投入太多精力维护两套系统,方法二也是一个可行的快速解决方案。

-- 展开阅读全文 --
头像
织梦搜索指定几个栏目
« 上一篇 03-23
dede专题模板下载哪里有?如何获取?
下一篇 » 03-23

相关文章

取消
微信二维码
支付宝二维码

目录[+]