先日、HTMLサイトのディレクトリの移動でリダイレクトをする機会がありました。その時にちょっとハマったのでメモとして残しておきます。
この記事を読むことで、一部のファイルだけサブディレクトリに移動した場合の.htaccessによるリダイレクトの方法がわかります。
やりたい変更内容
やりたかった内容は次の2点です。
- ルートディレクトリ(/)のファイルをサブディレクトリ(/sub)に移動
- ただし、ルートディレクトリのサブディレクトリ(/css、/js、/images、etc)は移動しない
解決したい課題
ルートディレクトリからサブディレクトリ(/sub)に移動したファイル内でjs/やcss/を相対パスで参照している箇所があり、404エラーとなる。
移動していないディレクトリへのアクセスがあったときには、.htaccessでリダイレクトしたい。
ディレクトリ移動した場合のhtaccessの書き方
ディレクトリ移動した場合のhtaccessの記載方法です。
ファイル内でjsディレクトリが相対参照になっている場合に、移動先でオリジナルのjsディレクトリ(ルートディレクトリにある)にアクセスできるようにするリダイレクト設定です。
設置場所は、ルートディレクトリになります。
RewriteEngine On
RewriteRule ^sub/js/?(.*)$ /js/$1 [R=301,L]
htaccessをどこに置くか?
先ほど、設置場所はルートディレクトリといいました。
では、移動先(/sub)に置く場合はどうしたらよいでしょうか?
/subを削除すればよいです。
変更前:RewriteRule ^sub/js/?(.*)$ /js/$1 [R=301,L]
↓
変更後:RewriteRule ^js/?(.*)$ /js/$1 [R=301,L]
RewriteEngine On
RewriteRule ^js/?(.*)$ /js/$1 [R=301,L]
.htaccessを置いた場所の直下のjsへアクセスがあったときを判定する必要があるので、subは不要です。
リダイレクト先は絶対パスなので変更ありません。
.htaccessはどこに置いた方が良い?
ルートディレクトリに.htaccessがあるとそのファイルを編集したくなりますが、何かの拍子に書き換えられることもあります。例えばWordpressは.htaccessファイルを操作します。
変更に関わる場所に置いて他から見えないようにする方が管理も楽だと思います。
今回のケースで言えば、ルートディレクトリではなくsubディレクトリに.htaccessを作成するということです。
まとめ
この記事ではディレクトリ移動した場合の.htacsessのリダイレクトの書き方と設置場所についてまとめました。そもそも、ルートディレクトリにファイルが転がっている方が悪いのですが、そこに文句を言えない状況もありますので、必要に迫られてやるしかない状況では役に立つかもしれません。