You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在同一.htaccess文件中配置移动端与桌面端分别跳转的规则

调整方案

你只需要把桌面端跳转规则直接放在现有所有规则的末尾即可,完整配置如下:

RewriteEngine On

# 处理query string里的mobile参数,设置对应cookie
RewriteCond %{QUERY_STRING} (^|&)mobile=1(&|$)
RewriteRule ^ - [CO=mobile:1:%{HTTP_HOST}]
RewriteCond %{QUERY_STRING} (^|&)mobile=0(&|$)
RewriteRule ^ - [CO=mobile:0:%{HTTP_HOST}]
# 当query string带mobile=0时,跳过下面的移动端检测规则
RewriteCond %{QUERY_STRING} (^|&)mobile=0(&|$)
RewriteRule ^ - [S=1]
# 移动端检测逻辑,命中则跳移动端站点,L标记表示命中后终止后续规则
RewriteCond %{HTTP:x-wap-profile} !^$ [OR]
RewriteCond %{HTTP_USER_AGENT} "android|blackberry|ipad|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC,OR]
RewriteCond %{HTTP:Profile}       !^$
RewriteCond %{HTTP_HOST}          !^m\.
RewriteCond %{HTTP:Cookie}        !\mobile=0(;|$)
RewriteRule ^(.*)$ https://m.somesite.com/$1 [R=301,L]

# 桌面端跳转规则:未命中移动端跳转的请求都会走到这里,跳桌面站点
RewriteRule ^(.*)$ https://desktop.othersomesite.com/$1 [R=301,L]
逻辑说明
  • 原有移动端跳转规则末尾的[L]标记会让命中移动端判断的请求直接跳转,不再执行后面的规则,刚好匹配你要的if(移动端)分支逻辑
  • 没有命中移动端跳转的请求,会自然落到末尾的桌面端跳转规则执行,对应你的elseif(桌面端)分支逻辑
  • 原有用户手动指定mobile=0强制跳桌面端的逻辑不受影响,符合需求

如果你有需要排除不跳转的路径/请求,可以在桌面端跳转规则前面加对应的RewriteCond条件过滤即可,比如要排除/api开头的接口请求不跳转,就加:

RewriteCond %{REQUEST_URI} !^/api

到桌面端RewriteRule的前面就行。

内容的提问来源于stack exchange,提问作者Karmay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 11:06:01