Я хочу обнаруживать мобильных пользователей по их user_agent.
Если пользователь просматривает полную версию сайта и у него есть определенный user_agent, я хочу перенаправить его (с помощью mod_rewrite) на мобильный сайт - если мобильная страница существует.
Пример полного URL сайта http://www.domain.com/page1.html Пример эквивалентного URL-адреса мобильного сайта (обратите внимание на .htm вместо .html) http://m.domain.com/page1.htm
Мне нужно сделать это с помощью apache, а не что-то вроде php
Бонус: на мобильном сайте могут быть ссылки на полный сайт (если на странице нет мобильной версии), и я хочу продолжать перенаправлять людей, и я хочу продолжить перенаправление, если люди не нажмут ссылку «Полный сайт», которая будет отключить их от перенаправления с помощью параметра url, например:? ver = ful
Смотреть Мобильный фильтр Apache бесплатен, прост в установке и настройке. Вот пример:
#Configuration AMF Filter
#
PerlSetEnv AMFMobileHome /usr/local/AMF
PerlSetEnv AMFProductionMode true
PerlSetEnv ServerMemCached localhost:11211
PerlTransHandler +Apache2::AMFLiteDetectionFilter
RewriteEngine on
RewriteCond %{ENV:AMF_DEVICE_IS_MOBILE} ^true*
RewriteRule ^(.*)$ http://m.foo.org [R=301,L]
Дай мне знать
Я нанесу удар.
На полном сайте vhost:
RewriteCond %{HTTP_USER_AGENT} Some-Mobile-UA [OR]
RewriteCond %{HTTP_USER_AGENT} Some-Other-Mobile-UA [OR]
RewriteCond %{HTTP_USER_AGENT} Yet-Another-Mobile-UA [OR]
RewriteCond %{HTTP_USER_AGENT} The-Final-Mobile-UA
RewriteCond /var/www/mobile%{REQUEST_URI} -f
RewriteCond %{HTTP_COOKIE} !stayOnFullSite
RewriteRule /(.*)l http://m.domain.com/$1 [R]
А в мобильном сайте vhost:
RewriteCond %{QUERY_STRING} ver=full
RewriteRule ^ - [CO=stayOnFullSite:true]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond /var/www/html%{REQUEST_URI}l -f
RewriteRule /(.*) http://www.domain.com/$1l [R]
Ноты:
Я довольно грубо отрубил конечную букву "l" .html
при перенаправлении на мобильный сайт и добавили его снова при перенаправлении обратно.
Я также отрубил его, когда проверял, существует ли файл на основном сайте, но я не могу понять, как его удалить, проверяя, существует ли файл на мобильном сайте. Возможно, еще один RewriteCond перед ним, который соответствует всем, кроме последней буквы "l" в %{REQUEST_URI}
а затем используйте %1
в следующем RewriteCond вот так:
RewriteCond %{REQUEST_URI} (.*)l
RewriteCond /var/www/mobile%1 -f
Возможно, будет проще стандартизировать ваш сайт с использованием одного расширения файла.
Вы можете установить остальные доступные параметры cookie. Подробности в mod_rewrite документы и раздел о флагах.
Эта конфигурация полностью не тестировалась.