Apache2:如何重定向用户到移动或正常网站基于设备使用mod_rewrite

Apache2:如何重定向用户到移动或正常网站基于设备使用mod_rewrite 自从智能手机和平板电脑的大规模兴起

Apache2:如何使用mod_rewrite将用户重定向到基于设备的移动或普通网站

由于智能手机和平板电脑如iPhone,iPad,Android手机和平板电脑,BlackBerry等等的大量兴起,您可能会考虑创建一个移动版本的网站。 本教程介绍如何访问者使用移动设备,如何访问者使用普通的台式PC,如何配置Apache来提供您的网站的移动版本。 这可以通过Apache的重写模块实现。

我不会保证这将为您工作!

1初步说明

在本教程中,我的“普通”网站可以访问http://www.example.comhttp://example.com ,而我的移动网站称为http://m.example.com 。 这些vhost已经存在于我的系统上,所以我不会介绍如何设置它们。

2启用mod_rewrite

首先,您必须确保Apache模块mod_rewrite已启用。 在Debian / Ubuntu上,您可以启用它:

a2enmod rewrite

稍后重新启动Apache - 对于Debian / Ubuntu,命令是:

/etc/init.d/apache2 restart

3配置Apache以允许在.htaccess文件中重写规则

我的“正常”网站www.example.com / example.com具有vhost配置文件/etc/apache2/sites-available/www.example.com.vhost和文档根/var/www/www.example.com / web

我的手机网站m.example.com具有vhost配置文件/etc/apache2/sites-available/m.example.com.vhost和文档根/var/www/www.example.com/mobile

我想将每个站点的重写规则放在.htaccess文件中(尽管也可以将重写规则直接放在vhost配置文件中)。 因此,我必须首先修改我们的vhost配置,以便允许.htaccess文件包含重写指令。 我们可以使用AllowOverride All行(允许.htaccess覆盖vhost配置中的所有设置)来执行此操作:

vi /etc/apache2/sites-available/www.example.com.vhost

[...]
        <Directory /var/www/www.example.com/web/>
                AllowOverride All
	</Directory>
[...]

vi /etc/apache2/sites-available/m.example.com.vhost

[...]
        <Directory /var/www/www.example.com/mobile/>
                AllowOverride All
        </Directory>
[...]

之后重新启动Apache:

/etc/init.d/apache2 restart

4创建重写规则

现在,我们为“正常”网站www.example.com / example.com创建重写规则,将所有移动设备的用户重定向到移动版本m.example.com - 我专注于相关设备/用户代理哪些是Android,Blackberry,googlebot-mobile(Google的移动搜索机器人),IE Mobile,iPad,iPhone,iPod,Opera Mobile,PalmOS和WebOS。

/var/www/www.example.com/web/.htaccess文件如下所示:

vi /var/www/www.example.com/web/.htaccess

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} "android|blackberry|googlebot-mobile|iemobile|ipad|iphone|ipod|opera mobile|palmos|webos" [NC]
RewriteRule ^$ http://m.example.com/ [L,R=302]
</IfModule>

对于我们的移动网站m.example.com ,将所有不使用移动设备的用户重定向到我们的“正常”网站www.example.com / example.com的重写规则如下 - 我简单地从之前的.htaccess文件中取消RewriteCond条件:

vi /var/www/www.example.com/mobile/.htaccess

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} "!(android|blackberry|googlebot-mobile|iemobile|ipad|iphone|ipod|opera mobile|palmos|webos)" [NC]
RewriteRule ^$ http://www.example.com/ [L,R=302]
</IfModule>

而已! 现在您可以进行一些测试,例如使用普通的桌面浏览器访问m.example.com

如果一切顺利,您应该重定向到www.example.com

现在用移动设备测试(我在这里使用Android手机),然后访问www.example.com

您应该重定向到m.example.com