*mod_rewrite [#f77daa63]
* 書き換え前のURL文字列とその設定のあるディレクトリの関係 [#jef5eafc]
** 書き換え前のURL文字列とその設定のあるディレクトリの関係 [#jef5eafc]
- サーバ単位の設定ファイルの中では、パターンは完全な URL に適用される。
- ディレクトリ単位の設定ファイルの中では、パターンマッチングのためにディレクトリ単位の接頭辞が自動的に 取り除かれ、置換が終わった後に自動的に付加される。
- すなわち、.htaccessや<Directory /foo/var></Directory>では、/から始るパターンマッチングはありえないということ。
***ありえない(無効) [#e47b8e20]
^/foo/var/somepath(.*) /foo/var/otherpath$1
***有効 [#i639fa52]
^somepath(.*) otherpath$1
** mod_rewriteを使った携帯ブラウザの振り分け [#pcf5745a]
携帯ブラウザからのアクセスをキャリアごとにリダイレクトするmod_rewriteの設定を示す。以下が設定上のポイントである。
- RewriteRuleの書き換え前の文字列にはクエリストリングは含まれない。
- クエリストリングを条件にするには、RewriteCond? %{QUERY_STRING} を使う。
- クエリストリングは書き換え後の文字列に自動的に付加される。
- 書き換え後の文字列に任意のクエリストリングを設定したい場合は、[QSA]フラグを付ける。
RewriteEngine On
# VODA
RewriteCond %{HTTP_USER_AGENT} ^J-PHONE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Vodafone [OR]
RewriteCond %{HTTP_USER_AGENT} ^SoftBank [OR]
RewriteCond %{HTTP_USER_AGENT} ^MOT-C [OR]
RewriteCond %{HTTP_USER_AGENT} ^MOT-V
RewriteRule ^/(.*)$ http://foo.com/?id=test&c=v [R,QSA]
# AU
RewriteCond %{HTTP_USER_AGENT} ^KDDI- [OR]
RewriteCond %{HTTP_USER_AGENT} ^UP\.Browser
RewriteRule ^/(.*)$ http://foo.com/?id=test&c=a [R,QSA]
# DOCOMO
RewriteCond %{HTTP_USER_AGENT} ^DoCoMo
RewriteRule ^/(.*)$ http://foo.com/?id=test&c=d [R,QSA]