開発ブログ

WWWクリエイターズが送る、Git、CSS、HTML、コマンドライン、Macの便利機能など、開発に関する役立ち情報発信します。気まぐれに更新。

htaccessの転送(リダクレクト)設定の書き方。

最終更新:2017-09-07 by Joe

ブログやサイトの引越しで、転送設定(リダイレクト)を設定するとき、だいたい毎回ググってしまう。そして、なぜか毎回つまづいている気がする。

本当は、こんなことに時間かけたくないのに!

そんなあなたに(私に)。いいかげん、スラスラ書けるようになりましょうということで、ここによく使う.htaccessの設定の書き方をまとめてしまいます。

でもまあ、ググると色々記事が出てくるけど、基本的にはApacheのマニュアルが最強というところまで、さまよった挙句に、辿り着きました。

apache htaccess: mod_rewrite

英語だと読みにくい!とか、使うとこだけ手っ取り早く知りたい。という人のため(私のため)にこの記事をまとめています。

.htaccessとは?

【入門編】いちお、予備知識です。

Webサーバー(Apache)の設定ファイルです。すべての設定の根源はhttpd.confという設定ファイルですが、

「ディレクトリごとに個別の設定をしたい」ときにこの「.htaccess」という名前ファイルを所望のディレクトリに配置します。そのディレクトリ配下のサブディレクトリにも有効になります。

特殊な設定ファイルなので、ファイルパーミションを644(オーナー以外は読み取りだけ)にしないと動かなかったりするから注意。このへんは他の記事とかApacheマニュアルみてね。

リダイレクトの種類

先に、下記の2種類の転送を区別しておいた方が理解しやすいと思います。

  • サイト内転送(Internal Forwarding)
  • 外部転送(External Forwarding)

「サイト内転送」の書き方

【実践編】細かいことはいいから、さっさと書いて終わらせたい。要は、自分のサイト内のURLの書き換えです。下記は、もっとも典型的な例です。

下記を、所望のディレクトリに配置します。

「old-dir」から「old-dir」へ転送する例

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^old-dir/(.)?$ new-dir/$1 [R=301]
</IfModule>

 

個々の行(ディレクティブ、と言います)ざっくり解説していきます。

RewriteEngine On

これは、ただの呪文です。mod_rewriteというモジュールを使う時に最初に書きます。

RewriteBase /

この後でてくる、RewriteRuleのパス(上記では、index.php)が相対パスである時、このベースを最初に付けた、URLパスが適応されます。利用します。もしこのディレクティブを書かないと、その.htaccessファイルを置いたディレクトが勝手に適応されます。

RewriteBase: 本家のapacheマニュアルでは?

疑っている人やすっきりしない人のために、本家のapacheマニュアル引用するよ。

「The RewriteBase directive specifies the URL prefix to be used for per-directory (htaccess) RewriteRule directives that substitute a relative path.」

引用元:http://httpd.apache.org/docs/current/mod/mod_rewrite.html

意訳ですが、

「RewriteBase」 は、htaccess内の 、相対パスを置換するRewriteRuleディレクティブで使われるURL接頭語を指定します。

と解釈します。要は「相対パスに置き換えるRewriteRuleディレクティブが書かれたら、これを頭にくっつけるよ」てことですね。

RewriteRule

これが、実際の書き換えの部分。ここもApacheの仕様で混乱しやすい点を書いておきます。

最初の「^/old-page-name/?$」は正規表現なわけですが、正規表現について知りたい人は、ここではカバーしないので、この辺(http://okumocchi.jp/php/re.php)見ておいてください

^ で、「パスの先頭」、$で「パスの末尾」であることを明示していて、かつ、/? でスラッシュ(Trailing Slash)が有・無を許容しているので、これにマッチするには、

http://your-website.com/old-dir
http://your-website.com/old-dir/
http://your-website.com/old-dir/my-company.html

のいずれともマッチすることを限定しています。

さて、外部転送と、RewriteCondなど、続きはまた明日。

 

閉じる