Назад | Перейти на главную страницу

Как я могу использовать apache для перенаправления пользователей (на основе user_agent и использования mod_rewrite) на мой мобильный сайт, только если мобильные страницы существуют.

Я хочу обнаруживать мобильных пользователей по их 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­_US­ER_­AGENT} Some-Mobile-UA [OR]
RewriteCond %{HTTP­_US­ER_­AGENT} Some-Other-Mobile-UA [OR]
RewriteCond %{HTTP­_US­ER_­AGENT} Yet-Another-Mobile-UA [OR]
RewriteCond %{HTTP­_US­ER_­AGENT} The-Final-Mobile-UA
RewriteCond /var/www/mobile%{REQU­EST­_URI} -f
RewriteCond %{HTTP­_CO­OKIE} !stayOnFullSite
RewriteRule /(.*)l http://m.domain.com/$1 [R]

А в мобильном сайте vhost:

RewriteCond %{QUER­Y_S­TRING} ver=full
RewriteRule ^ - [CO=stayOnFullSite:true]

RewriteCond %{REQU­EST­_FI­LENAME} !-f
RewriteCond /var/www/html%{REQU­EST­_URI}l -f
RewriteRule /(.*) http://www.domain.com/$1l [R]

Ноты:

Я довольно грубо отрубил конечную букву "l" .html при перенаправлении на мобильный сайт и добавили его снова при перенаправлении обратно.

Я также отрубил его, когда проверял, существует ли файл на основном сайте, но я не могу понять, как его удалить, проверяя, существует ли файл на мобильном сайте. Возможно, еще один RewriteCond перед ним, который соответствует всем, кроме последней буквы "l" в %{REQUEST_URI} а затем используйте %1 в следующем RewriteCond вот так:

RewriteCond %{REQU­EST­_URI} (.*)l
RewriteCond /var/www/mobile%1 -f

Возможно, будет проще стандартизировать ваш сайт с использованием одного расширения файла.

Вы можете установить остальные доступные параметры cookie. Подробности в mod_rewrite документы и раздел о флагах.

Эта конфигурация полностью не тестировалась.