別ドメインにお引越しするついでに、アンダーバーをハイフンにしたいケース。引越し前がApacheというのは、まだよくある話だと思うのでメモ。.htaccess
にこんな感じで書けばOK。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule (.*)_(.*) $1-$2 [N=10]
RewriteRule (.*) http://somewhere.dom/$1 [R=301]
</IfModule>
- RewriteRule 1行目: 一つ目の
_
を-
に置換し、_
が無くなるまで繰り返す - RewriteRule 2行目: 新しいドメインに転送
[N]フラグ
公式サイトの例だとこんな感じ。パスに含まれるA
をすべてB
に変えます。
RewriteRule (.*)A(.*) $1B$2 [N]
ただし、ドキュメントにも
Use with extreme caution
と書かれているように、設定を失敗すると無限ループするので注意が必要です。バージョン2.4.8以降であれば、[N=10]
のようにして繰り返し回数を制限できます。
[DPI]フラグ
最初の例だとうまく動かない場合、[DPI]フラグをつけて、PATH_INFO
を削除すると解決することも。レンタルサーバとかの.htaccess
は謎が多い...
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule (.*)_(.*) $1-$2 [N=10,DPI]
RewriteRule (.*) http://somewhere.dom/$1 [R=301]
</IfModule>