htaccess中有太多的重定向

时间:2014-03-02 16:40:26

标签: apache .htaccess

我想完成以下任务:

redirect non-www to www for all users
redirect desktop users to www.example.com/homepage
redirect mobile users to www.example.com/m
hide /homepage and /m from url so users will see www.example.com only

这是我的htaccess代码。我遇到了很多问题,比如没有重定向到/ m的东西,而且iphone用户看到“太多的重定向”,有时桌面用户被带到/ m,即使他们应该被带到/ homepage。

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]


<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^$ /homepage/ [R=301]
</IfModule>

RewriteCond %{HTTP_USER_AGENT} ^.*iPad.*$
RewriteRule ^(.*)$ http://www.example.com/m [R=301]
RewriteCond %{HTTP_USER_AGENT} ^.*iPod.*$
RewriteRule ^(.*)$ http://www.example.com/m [R=301]
RewriteCond %{HTTP_USER_AGENT} ^.*iPhone.*$
RewriteRule ^(.*)$ http://www.example.com/m [R=301]
RewriteCond %{HTTP_USER_AGENT} ^.*iemobile.*$
RewriteRule ^(.*)$ http://www.example.com/m [R=301]
RewriteCond %{HTTP_USER_AGENT} ^.*blackberry.*$
RewriteRule ^(.*)$ http://www.example.com/m [R=301]
RewriteCond %{HTTP_USER_AGENT} ^.*Android.*$
RewriteRule ^(.*)$ http://www.example.com/m [R=301]

1 个答案:

答案 0 :(得分:0)

这将为您提供太多重定向,因为您只查看用户代理,而不是请求的URI,因此每次移动用户代理匹配时,您都会不断将其重定向到www.example.com/m。您还可以将所有用户代理添加到单个正则表达式中,以减少需要维护的规则数。

您需要添加一个条件来查看REQUEST_URI。以下内容应该如下:

RewriteCond %{HTTP_USER_AGENT} ^.*(ip(ad|od|hone)|blackberry|iemobile|android).*$ [NC]
RewriteCond %{REQUEST_URI} !^/m/.*
RewriteRule ^.*$ http://www.example.com/m [R=301,L]