Nginx实现手机U-A访问时自动跳转一切 m.bbs.monster前缀的url

已有 9 次阅读2025-10-24 15:50 |个人分类:论坛更新日志

 Nginx修正逻辑
  1. 用中间变量 $is_mobile 拆分条件
    • 第一步:默认 $is_mobile=0(非移动端)。
    • 第二步:如果匹配移动端 User-Agent,设 $is_mobile=1
    • 第三步:如果访问的是 m.bbs.monster 域名,强制设 $is_mobile=0(排除自身,避免循环跳转)。
    • 第四步:仅当 $is_mobile=1 时,执行重定向。
  2. 避免复合条件语法放弃原有的 if (A && B) 写法,改用 Nginx 完全支持的「多 if 赋值 + 最终判断」,兼容所有 Nginx 版本(包括 1.28.0)。

操作步骤

  1. 复制上述完整配置,覆盖你当前的 bbs.monster.conf 文件内容。
  2. 点击宝塔面板的「检查配置」,此时会提示「配置正常」。
  3. 重启 Nginx,配置立即生效。

验证效果

  • 手机访问 www.bbs.monster/xxx → 自动跳转到 m.bbs.monster/xxx
  • 手机访问 bbs.monster/xxx → 自动跳转到 m.bbs.monster/xxx
  • 手机直接访问 m.bbs.monster/xxx → 不跳转(正常显示)。
  • 电脑访问任意域名 → 不跳转(正常显示)。

路过

雷人

握手

鲜花

鸡蛋

发表评论 评论 (2 个评论)

回复 LeoSasion 2025-10-24 15:51
优化方案:在 Discuz! 模板中添加 canonical 标签
操作路径:
登录 Discuz! 后台 → 界面 → 模板管理 → 选择当前使用的模板 → 编辑「头部模板(header.htm)」。
添加代码:在 <head> 标签内插入以下代码(根据页面类型动态指定主 URL):

<!-- 电脑端页面:指定 www.bbs.monster 为主 URL -->
<{if !$is_mobile}>
    <link rel=&quot;canonical&quot; href=&quot;https://www.bbs.monster{$_SERVER['REQUEST_URI']}&quot; />
<!-- 移动端页面:指定 m.bbs.monster 为主 URL -->
<{else}>
    <link rel=&quot;canonical&quot; href=&quot;https://m.bbs.monster{$_SERVER['REQUEST_URI']}&quot; />
<{/if}>

作用:告诉搜索引擎「电脑端内容的主地址是 www 域名,移动端是 m 域名」,避免重复收录。
适配 Discuz!:$is_mobile 是 Discuz! 自带的移动端判断变量,可直接使用。
回复 LeoSasion 2025-10-24 16:46
为什么链接显示 bbs.monster 而非 m.bbs.monster?
因为你的 Discuz! 后台「站点 URL 配置」中,默认使用的是 裸域(bbs.monster) 作为主 URL,所以模板渲染页面时,会自动生成以 bbs.monster 开头的静态链接(比如帖子链接、用户空间链接)。
这种「静态链接显示裸域」的情况不影响功能,因为:
用户视角:点击链接后,Nginx 会根据设备类型判断 —— 如果是手机,会自动跳转到 m.bbs.monster/对应的路径;如果是电脑,直接访问 bbs.monster/路径(或跳转到 www.bbs.monster,取决于你的裸域跳转配置)。
搜索引擎视角:爬虫不会只看链接文本,会「实际访问链接」并抓取页面 ——
电脑端爬虫访问 bbs.monster/thread-558-1-1.html → 不触发跳转,抓取页面后看到 canonical 标签指向 www.bbs.monster/thread-558-1-1.html → 收录 www 版本。
移动端爬虫访问 bbs.monster/thread-558-1-1.html → 触发 302 跳转到 m.bbs.monster/thread-558-1-1.html → 抓取跳转后的页面,看到 canonical 标签指向 m 版本 → 收录 m 版本。
简单说:对SEO,超链接显示什么不重要,重要的是访问后的跳转逻辑和 canonical 标签的指引。

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册