2020/09/15

mod_rewriteの設定(URLエンコード対策)

Webサイトの記事を移転させたので、旧ページから新ページに転送させようとした。旧サイトはApacheで動いていたので、mod_rewriteで簡単!と思ったら、少しハマった。

移行先の記事につけたラベルが日本語のためURLに日本語が含まれるのだが、URLエンコードされたURLをmod_rewriteの転送先に設定しようとしたらうまく行かなかった。


これは、URLエンコードに含まれる%[0-9]が、文字の置換に合うため。

たとえば、「あ」をURLエンコードすると「%E3%81%82」となるのだが、%8の部分がmod_rewriteの変数置換の対象として処理される。%8に値が含まれていないと%8の部分が欠落し、転送先のURLとして「%E312」というURLが返されてしまう。

そのため、%の後に数字が続く場合は、%をエスケープしてやる必要がある。

Vimで編集するなら以下のようなコマンドを実行する。

:%s/\(%[0-9]\)/\\\1/gc


その結果、RewriteRuleとしては以下のようになる

<IfModule mod_rewrite.c>
RewriteEngine on

RewriteBase "/~hi-lo/blog/"
RewriteRule "^archives/security/security-soft/$" "https://gen.fukatani.org/search/label/%E3\%82%BB%E3\%82%AD%E3\%83%A5%E3\%83%AA%E3\%83\%86%E3\%82%A3\%28%E3\%82%BD%E3\%83\%95%E3\%83\%88\%29" [R=301,NE,L]
</IfModule>



0 件のコメント:

コメントを投稿