[Apache] .htaccessで特定ディレクトリ配下へのアクセスを別ディレクトリにリダイレクトする方法

ウェブサイトのURLに含まれるディレクトリ名の綴りが間違っていた、ディレクトリ名を分かりやすくしたい、ディレクトリ名が気に入らない、組織名や商品名をディレクトリ名にしていたが組織名や商品名が変わったのでディレクトリ名を変更したい...など様々な理由でURLに含まれるディレクトリ名を変更する場合があると思う。
ディレクトリ名を変更するだけなら簡単かもしれないが、変更前のディレクトリにアクセスがあった場合、何も考慮しないとリンク切れになってしまうから、リンク切れ問題が発生しないように考慮しておいた方がよい。
リンク切れを防ぐ方法の1つとして、変更前のディレクトリにアクセスがあったら、変更後のディレクトリに強制的にリダイレクトをする設定を行う方法がある。

今回はApacheの.htaccessファイルで特定ディレクトリ配下へのアクセスを別ディレクトリにリダイレクトする方法を説明する。

特定ディレクトリ配下へのアクセス全てを別ディレクトリのトップページにリダイレクトする設定例

前提条件

旧URL

http(s)://ドメイン名/abc_directory/old_directory/任意のファイル名またはディレクトリ名

新URL

http(s)://ドメイン名/abc_directory/new_directory/

リダイレクト例

特定ディレクトリのトップページから別ディレクトリのトップページにリダイレクト
リダイレクト元

http(s)://ドメイン名/abc_directory/old_directory/

リダイレクト先

http(s)://ドメイン名/abc_directory/new_directory/

特定ディレクトリ配下の任意のファイル名から別ディレクトリのトップページにリダイレクト
リダイレクト元

http(s)://ドメイン名/abc_directory/old_directory/abcdefg.html

リダイレクト先

http(s)://ドメイン名/abc_directory/new_directory/

特定ディレクトリ配下の任意のディレクトリ名から別ディレクトリのトップページにリダイレクト
リダイレクト元

http(s)://ドメイン名/abc_directory/old_directory/abcdefg/

リダイレクト先

http(s)://ドメイン名/abc_directory/new_directory/

.htaccessファイルの設定

.htaccessファイルの設置場所

/ドキュメントルート/abc_directory/.htaccess

.htaccessファイルの中身
RewriteEngine on RewriteRule ^old_directory/(.*)$ /abc_directory/new_directory/ [R=301,L]

特定ディレクトリ配下へのアクセス全てを別ディレクトリにファイル名を維持してリダイレクトする設定例

前提条件

旧URL

http(s)://ドメイン名/abc_directory/old_directory/任意のファイル名またはディレクトリ名

新URL

http(s)://ドメイン名/abc_directory/new_directory/任意のファイル名またはディレクトリ名

リダイレクト例

特定ディレクトリ配下の任意のファイル名を維持したまま別ディレクトリにリダイレクト
リダイレクト元

http(s)://ドメイン名/abc_directory/old_directory/abcdefg.html

リダイレクト先

http(s)://ドメイン名/abc_directory/new_directory/abcdefg.html

特定ディレクトリ配下の任意のディレクトリ名を維持したまま別ディレクトリにリダイレクト
リダイレクト元

http(s)://ドメイン名/abc_directory/old_directory/abcdefg/

リダイレクト先

http(s)://ドメイン名/abc_directory/new_directoryabcdefg/

特定ディレクトリ配下の任意のディレクトリ名、ファイル名を維持したまま別ディレクトリにリダイレクト
リダイレクト元

http(s)://ドメイン名/abc_directory/old_directory/abcdefg/xyz.html

リダイレクト先

http(s)://ドメイン名/abc_directory/new_directoryabcdefg/xyz.html

.htaccessファイルの設定

.htaccessファイルの設置場所

/ドキュメントルート/abc_directory/.htaccess

.htaccessファイルの中身
RewriteEngine on RewriteRule ^old_directory/(.*)$ /abc_directory/new_directory/$1 [R=301,L]

リダイレクト元で丸括弧で囲んだ部分は0文字以上の任意の文字列を表す正規表現。正規表現で特定ディレクトリ配下の任意のディレクトリ名、ファイル名を取得している。正規表現検索で取得した字列は変数「$1」に格納されるため、リダイレクト先の別ディレクトリ配下で変数「$1」を指定することで、特定ディレクトリ配下の任意のディレクトリ名、ファイル名を維持したまま別ディレクトリにリダイレクトすることができる。

.htaccessでのリダイレクト設定画面

この画像では上述のリダイレクト設定を2つ書いてあるが、用途に応じてどちらか1つの設定だけをすればよい。どちらの設定がよいかについてはケースバイケース。リダイレクト元のファイル名、ディレクトリ名を維持してリダイレクトをしたとしても、リダイレクト先にページがない場合はリンク切れとなってしまう。リンク切れになるぐらいであれば、リダイレクト元の特定ディレクトリ配下のファイル名やディレクトリ名がどのようなものであっても全部切り捨て、リダイレクト先は別ディレクトリのトップページだけとする、という方が都合がよい場合もある。

前へ

松山駅から八幡浜駅までの乗車券・自由席特急券・領収書

次へ

[Linux] tar: Cowardly refusing to create an empty archiveの解決方法