Спасибо Тиму Стоуну, Науну и Кевину Бонду, эти ответы действительно помогли мне.Вот моя адаптация вашего кода.Я добавил функциональность, которая будет перенаправлена обратно на сайт рабочего стола с m.example.com, если пользователь не заходит на сайт с мобильного устройства.Кроме того, я добавил переменную окружения для сохранения запросов http / https:
# Set an environment variable for http/https.
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ - [env=ps:https]
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ - [env=ps:http]
# Check if m=1 is set and set cookie 'm' equal to 1.
RewriteCond %{QUERY_STRING} (^|&)m=1(&|$)
RewriteRule ^ - [CO=m:1:example.com]
# Check if m=0 is set and set cookie 'm' equal to 0.
RewriteCond %{QUERY_STRING} (^|&)m=0(&|$)
RewriteRule ^ - [CO=m:0:example.com]
# Cookie can't be set and read in the same request so check.
RewriteCond %{QUERY_STRING} (^|&)m=0(&|$)
RewriteRule ^ - [S=1]
# Check if this looks like a mobile device.
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} !^$
# Check if we're not already on the mobile site.
RewriteCond %{HTTP_HOST} !^m\.
# Check if cookie is not set to force desktop site.
RewriteCond %{HTTP_COOKIE} !^.*m=0.*$ [NC]
# Now redirect to the mobile site preserving http or https.
RewriteRule ^ %{ENV:ps}://m.example.com%{REQUEST_URI} [R,L]
# Check if this looks like a desktop device.
RewriteCond %{HTTP_USER_AGENT} "!(android|blackberry|ipad|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile)" [NC]
# Check if we're on the mobile site.
RewriteCond %{HTTP_HOST} ^m\.
# Check if cookie is not set to force mobile site.
RewriteCond %{HTTP_COOKIE} !^.*m=1.*$ [NC]
# Now redirect to the mobile site preserving http or https.
RewriteRule ^ %{ENV:ps}://example.com%{REQUEST_URI} [R,L]
Это работает нормально, за исключением одной вещи: когда я нахожусь на настольном сайте с настольным устройством и посещаю m.example.com /? m = 1, я перенаправлен на example.com.Когда я пытаюсь снова, я «остаюсь» на m.example.com.Кажется, что cookie-файл не установлен и / или не читается правильно в первый раз.
Может быть, есть лучший способ определить, является ли устройство настольным устройством, я просто отрицал обнаружение устройства сверху.
И мне интересно, если таким образом обнаруживаются все мобильные устройства.В коде Тима Стоуна и Науну эта часть намного больше.