ApacheでUser Agentによりスマホのアクセスを振り分けるmod_rewrite
Apache側でUserAgentを判別してスマホページに振り分ける場合のmod_rewrite設定。
<Directory "/home/dacelo/html">
AllowOverride All
Order allow,deny
allow from all
<IfModule mod_rewrite.c>
RewriteEngine on
SetEnvIf User-Agent "iPhone" UA=sp
SetEnvIf User-Agent "iPod" UA=sp
SetEnvIf User-Agent "iPad" UA=sp
SetEnvIf User-Agent "Android" UA=sp
RewriteCond %{REQUEST_URI} !/sp/
RewriteCond %{QUERY_STRING} !^mode=pc
RewriteCond %{ENV:UA} ^sp$
RewriteRule ^(.*)$ /sp/$1 [R,L]
RewriteBase /
RewriteCond %{REQUEST_URI} /sp/
RewriteCond %{QUERY_STRING} !^mode=sp
RewriteCond %{ENV:UA} !^sp$
RewriteRule ^sp(.*)$ $1 [R,L]
</IfModule>
</Directory>
解説
Directoryディレクティブの中に書いてます。
最初に”SetEnvIf”でUAによって”ua=sp”の環境変数をセットしているので、もしiPhone、iPod、iPad、Android以外に追加したい端末があれば追加します。まあiOSとAndroid以外は切り捨てて特に問題ないでしょう。
もしガラケーサイトとかを平成も終わる2019年になっても未だにやっている場合は、ここにDocomoとかそういうのを追加する。
RewriteCond %{REQUEST_URI} !/sp/
この指定は超重要で、そもそもspディレクトリにすでにいる場合には除外する。これがないと無限ループが発生してしまう。
広告
もしスマホで見てるけど開発時にスマホでPC版を見たいんだ!とかワガママな要望があった場合のために、”mode=pc”というクエリストリングの場合を除外設定に入れておく。これによって、
http://hogehoge/example.html?mode=pc
というリクエストがあった場合は、スマホからのアクセスでもリダイレクトしない。