我想根据他们的user_agent检测移动用户。
如果用户正在浏览网站的完整版本,并且他们有一个特定的user_agent,我想将他们(使用mod_rewrite)redirect到移动网站 – 如果移动页面存在。
完整网站url示例http://www.domain.com/page1.html等效移动网站url示例(注意.htm而不是.html) http://m.domain.com/page1.htm
我需要用Apache来做这个,而不是像PHP一样
奖励:移动网站可以链接到整个网站(如果页面没有移动equilelant),我想继续redirect人,我想继续redirect,除非用户点击“完整站点”链接,这将select他们通过url参数redirect – 例如:?ver = ful
我会刺。
在完整的网站虚拟主机:
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]
而在手机网站虚拟主机中:
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]
笔记:
当我redirect到手机网站时,我已经粗略地将尾随的“l”切掉了,并在重新导向时重新添加。
当检查文件存在于主站点时,我也将其切断,但是当检查移动站点上存在该文件时,我不知道如何删除它。 可能是在它前面的另一个RewriteCond,它与%{REQUEST_URI}的最后一个“l”匹配,然后在下面的RewriteCond中使用%1 :
RewriteCond %{REQUEST_URI} (.*)l RewriteCond /var/www/mobile%1 -f
在单个文件扩展名上标准化您的网站可能更容易。
您可以设置其余的可用cookie参数。 细节在mod_rewrite文档和标志部分 。
这个configuration完全没有经过testing。
看阿帕奇移动filter是免费的,易于安装和configuration。 这里是一个例子:
#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]
让我知道