Apache2:如何使用mod_rewrite将用户重定向到基于设备的移动或普通网站
由于智能手机和平板电脑如iPhone,iPad,Android手机和平板电脑,BlackBerry等等的大量兴起,您可能会考虑创建一个移动版本的网站。 本教程介绍如何访问者使用移动设备,如何访问者使用普通的台式PC,如何配置Apache来提供您的网站的移动版本。 这可以通过Apache的重写模块实现。
我不会保证这将为您工作!
1初步说明
在本教程中,我的“普通”网站可以访问http://www.example.com
和http://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
:
5链接
- Apache: http : //httpd.apache.org/
- Apache模块mod_rewrite: http : //httpd.apache.org/docs/current/mod/mod_rewrite.html