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
というリクエストがあった場合は、スマホからのアクセスでもリダイレクトしない。

About: dacelo


Leave a Reply

Your email address will not be published. Required fields are marked *