helen's blog

ずっとおもしろいことしてたいな。

apacheのリダイレクトが設定しきれてなかった件

apacheにリダイレクトの設定を書いてみた - helen's blog

先回でapacheのリダイレクトの設定を書き換えたのですが
落とし穴に見事にはまっていました。

# /hoge/ を /new_hoge/ にリダイレクトしたい
RewriteRule ^/hoge/$ /new_hoge/ [R=301,L]

ですが実はこのURL

が存在していたため、上記の設定だと
直接 /new_hoge/1/detail/ にアクセスすると404エラーになります。

そのため正規表現で書き直し

RewriteRule ^/hoge/(.*)$ /new_hoge/$1 [R=301,L]

/hoge/の後ろにあるものを(.*)にまとめ$1に入れます。
これで /new_hoge/1/detail/にも対応できるようになりました。

ちなみに

L とは

RewriteRule ^/hoge/(.*)$ /new_hoge/$1 [R=301,L]

条件にマッチした場合そこで判定を終了する(以下に続くRewriteRuleを評価しない)

参考:Apache : mod_rewriteリファレンス - dawgsdk.org

その他正規表現

.* は()でくくられていないと破棄される
RewriteRule ^/hoge/.*/(.*)$ /new_hoge/$1 [R=301,L]
変数を2つ使う
RewriteRule ^/hoge/([0-9]{4})/([a-z]*)$ /new_hoge/$1/$2 [R=301,L]

([0-9]{4})/([a-z]*)\.html   /newblog/$1/$2.shtml

参考:mod_rewriteまとめ(2)mod_rewriteで使う正規表現

関係ないけど
就活生の採用の面談中にこのバグ報告が飛んできてビビりました。