/etc/httpd/conf.d/unko.conf
# http://192.168.0.2/unko/photo/hogehoge.jpg # を、Apacheのrewrite機能により 次のように変換する # /unko/photo/hogehoge.jpg # ⇒ /unko/getphoto.php?filename=hogehoge.jpg Alias "/unko" "/opt/unko/www" <Directory "/opt/unko/www"> AllowOverride all Require all granted RewriteEngine On RewriteRule ^(.*)/photo/(.*\.jpg)$ $1/getphoto.php?filename=$2 [L,QSA] # rewriteのログを見たいとき用 # LogLevel alert rewrite:trace6 </Directory>
フラグ
[L,QSA] の L は、条件にマッチしたらそこで処理を終える Lastフラグ
具体的には次のような条件のとき、ABCDEF も ABC も両方とも FINALになる
RewriteRule ^(.*)/ABCDEF/(.*)$ $1/ABC/$2 RewriteRule ^(.*)/ABC/(.*)$ $1/FINAL/$2
[L]が付いてると、ABCDEF は ABC になり、FINALにはならない。 ABCはちゃんと FINAL になる
RewriteRule ^(.*)/ABCDEF/(.*)$ $1/ABC/$2 [L] RewriteRule ^(.*)/ABC/(.*)$ $1/FINAL/$2 [L]
ルールが1行しかないときはどうでもいいけど、とりあえず付けておく癖を付けておいた方がいい
[L,QSA] の QSA は、クエリにある変数を取っとく Query String Appendフラグ
具体的には次のような条件のとき、
ABC/hoge.jpg?piyo=fuga は get.php?file=hoge.jpg になって piyo=fugaは無くなっちゃうが
EDF/hoge.jpg?piyo=fuga は get.php?file=hoge.jpg&piyo=fuga となり、変数が&までついてちゃんと残る。
RewriteRule ^(.*)/ABC/(.*)$ $1/get.php?file=$2 RewriteRule ^(.*)/EDF/(.*)$ $1/get.php?file=$2 [QSA]
変数がないときはどうでもいいけど、とりあえず付けておく癖を付けておいた方がいい
参考:
mod_rewriteのQSAフラグの存在をよく忘れる件 - でじくる。
mod_rewrite - Apache HTTP Server Version 2.4
.htaccess に RewriteRule 書くときは、[L]フラグをつけてもそこで終了しないかもよ?って話。 #Apache - Qiita