使用しているデバイスに基づくApache 2リダイレクトと書き換え
Apache2: デバイスに基づいてユーザーをモバイルまたは通常のウェブサイトにリダイレクトする方法(mod_rewriteを使用)
このページで
- 1 前書き
- 2 mod_rewrite を有効にする
- 3 .htaccessファイルでリライトルールを許可するためのApacheの設定
- 4 書き換えルールの作成
- 5リンク
スマートフォンやタブレット(iPhone、iPad、Androidの電話やタブレット、BlackBerryなど)の大規模な普及以来、Webサイトのモバイル版を作成することを検討したかもしれません。このチュートリアルでは、訪問者がモバイルデバイスを使用している場合にはWebサイトのモバイル版を提供し、標準のデスクトップPCを使用している場合には通常版を提供するためにApacheを設定する方法を説明します。これはApacheのリライトモジュールを使用して実現できます。
1 前書き
このチュートリアルでは、私の「通常の」ウェブサイトは http://www.example.com と http://example.com でアクセスできますが、私のモバイルサイトは http://m.example.com と呼ばれています。これらの仮想ホストはすでに私のシステムに存在しているので、設定方法については触れません。
2 mod_rewrite を有効にする
最初に、Apacheモジュールmod_rewriteが有効になっていることを確認する必要があります。このモジュールを使用すると、httpdリダイレクト、Apacheリダイレクション、ApacheのURL書き換えがApacheウェブサーバーを介して行えます。Debian/Ubuntuでは、次のようにして有効にできます:
a2enmod rewriteその後、Apacheを再起動します - Debian/Ubuntuの場合、コマンドは次の通りです。
/etc/init.d/apache2 restart3 .htaccessファイルでリライトルールを許可するためのApacheの設定
私の「通常の」ウェブサイト 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設定ファイルに直接配置することも可能ですが)ので、Apache HTTPサーバーが読み取れるようにする必要があります。そのために、まずは.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 restart4 書き換えルールの作成
さて、モバイルデバイスのすべてのユーザーをモバイル版m.example.comにリダイレクトするための「通常」のウェブサイトwww.example.com/example.comの書き換えルールを作成しましょう。ここでは、Android、ブラックベリー、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リンク
- アパッチ: http://httpd.apache.org/
- Apacheモジュール mod_rewrite: http://httpd.apache.org/docs/current/mod/mod_rewrite.html



