Mobile Redirect = Mod_Rewrite无限循环,出了什么问题?

时间:2011-03-15 21:21:10

标签: mod-rewrite cookies mobile

嘿所有,我正在尝试重定向到位于我的子目录m中的移动网站, 更糟糕的是,我试图只在索引页面上进行重定向,然后只有在没有设置cookie(mobile)的情况下(以便我可以将用户发送回桌面站点)无论如何,我的mod-rewrite卡在无限循环中,这是来自.htaccess的代码:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/m/.*$
RewriteCond %{HTTP_COOKIE} !^.*mobile.*$ [NC]
RewriteCond %{HTTP_ACCEPT} "text\/vnd\.wap\.wml|application\/vnd\.wap\.xhtml\+xml" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "sony|symbian|nokia|samsung|mobile|windows ce|epoc|opera mini|IEmobile|DoCoMo" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "nitro|j2me|midp-|cldc-|netfront|mot|up\.browser|up\.link|audiovox"[NC,OR]
RewriteCond %{HTTP_USER_AGENT} "blackberry|ericsson,|panasonic|philips|sanyo|sharp|sie-|ipad|ipod|iphone"[NC,OR]
RewriteCond %{HTTP_USER_AGENT} "portalmmm|blazer|avantgo|danger|palm|series60|palmsource|pocketpc"[NC,OR]
RewriteCond %{HTTP_USER_AGENT} "smartphone|rover|ipaq|au-mic,|alcatel|ericy|vodafone\/|wap1\.|wap2\.|mobile safari|android"[NC]
RewriteRule ^(.*)$ m/$1 [R=307,NC,L,QSA]

是什么让这个陷入困境?

另外,它将/ var / www / html // var / www / html // var / www / html // var / www / html /添加到网址

4 个答案:

答案 0 :(得分:1)

我立即看到了两个问题。

  1. 可能会发生对/ var / www / html ...的不断重写,因为您没有正确设置RewriteBase。听起来你需要RewriteBase /var/www/html,假设它实际上是你网站的根目录。
  2. 如果我没记错的话,在每个目录中重写(即重写.htaccess),你的路径中没有前导斜杠。这是您的第一个RewriteCond上的问题,您要在m/之前检查一个前导斜杠,这可能永远不会出现在那里。
  3. 我不是说这会解决你所有的问题,我现在没有时间进一步研究,但也许这会让你开始。

答案 1 :(得分:1)

用途如果你使用Apache Mobile Filter更容易,例如你想问:

#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] 

这个示例使用的AMFLiteDectionFilter模块不需要设备存储库,但AMF支持多个设备存储库,如51Degrees.mobi,DetectRight和WURFL

答案 2 :(得分:0)

如何打开日志,看看到底发生了什么?

RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 3

这是RewriteLog和RewriteLogLevel方言的文档:

答案 3 :(得分:0)

我不确定如何或为什么,但以下代码正常运行:

RewriteCond %{REQUEST_URI} !^/m/.*$
RewriteCond %{HTTP_COOKIE} !^.*mobile.*$ [NC]
RewriteCond %{HTTP_ACCEPT} "text\/vnd\.wap\.wml|application\/vnd\.wap\.xhtml\+xml" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "sony|symbian|nokia|samsung|mobile|windows ce|epoc|opera mini|IEmobile|DoCoMo" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "nitro|j2me|midp-|cldc-|netfront|mot|up\.browser|up\.link|audiovox"[NC,OR]
RewriteCond %{HTTP_USER_AGENT} "blackberry|ericsson,|panasonic|philips|sanyo|sharp|sie-|ipad|ipod|iphone"[NC,OR]
RewriteCond %{HTTP_USER_AGENT} "portalmmm|blazer|avantgo|danger|palm|series60|palmsource|pocketpc"[NC,OR]
RewriteCond %{HTTP_USER_AGENT} "smartphone|rover|ipaq|au-mic,|alcatel|ericy|vodafone\/|wap1\.|wap2\.|mobile safari|android"[NC]
RewriteRule ^(.*)$ /m/ [L,R=307,QSA]

我最好的猜测是RewriteBase已经在httpd.conf中定义并导致某种冲突