mod_rewriteで単純なことにやられたときの話

月虹製作に入社しまして早いものであと2週間で半年たちます。斉藤です。
いまだに毎日が新しい知識の連続で改めてこの業界の奥深さを感じるところであります。
そんな中、apacheのmod_rewriteをいじっているときに初心者で知識が足りなくハマってしまった部分があるのでメモがてら書いておこうと思います。

RewriteRule ^hoge_(.*)/(.*)$       /hoge/$2?type=$1 [L,QSA]


Rewriteの部分は最初はこう書いていました。 hoge_a/ hoge_b/ hoge_c/ 例えばaタグでこれらのリンクをクリックすれば$_REQUESTでtypeはそれぞれa,b,cをとれました。 やりたかったのは hoge_a/edit/ とやったときにeditディレクトリの画面に飛ばしたかったのですが、どうしてもそのeditディレクトリの画面に飛ばずにURLはhoge_a/edit/と一応はなっていますがhoge_a/と同じ画面が出続けていました。 そこでeditディレクトリのindex.phpでvar_dump($_REQUEST)してみて何がとれているかを確認してみました。 するとhoge_a/edit/ではtypeがaになっていてほしかったところ、a/editとなってしまっていました。


RewriteRule ^hoge_(.*)/(.*)$


hoge_(.*)としてしまっていたため、正規表現で(.*)これはなんでもいい文字の連続を取ってしまうため「a」だけでなく「/edit」もなんでもいい文字の連続として取ってしまっていました。

 

RewriteRule ^hoge_([a-z]+)/(.*)$         hoge/$2?type=$1[L,QSA]


このようにhoge_([a-z]+)としてaからzしか取らないよとやってあげたらあら簡単、
hoge_a/edit/でしっかりとedit画面に飛ばすことができました。 なんか何書いてるかよくわからなくはなりましたが、 なんてことない正規表現の知識不足でしょうもないところでハマってしまいましたということです。 次はもう同じミスをしないよう頑張りやす!

 

 

参考記事です。

サルにもわかる正規表現入門