.htaccessを編集してリダイレクトする。


ドラえも~ん!ページが404だよ~(泣

どうやらリンクが切れてしまっていてあるページにアクセスしようとすると404が返って来てしまうみたい。
新しいページを作るのは面倒だし、トップページを表示させるようにしたい…
でも、いちいち<a>タグを全て編集するのも面倒…
どうすれば良いの~(泣

.htaccess編集して301リダイレクトしなよ

え?あの.htaccessって良くわからない英語がバーって書かれているアレ!?
そんなの編集出来ないよ…
イタッ、わかったよ~、なんとか出来るように調べるよ~(泣

STEP1:RewriteEngine onする。

.htaccessの一番最初の行に書く「おまじない」みたいなもん。
Apacheのモジュールであるmod_rewriteを利用するときに使う宣言文らしい。

STEP2:RewriteRuleを書く。

RewriteRule ^index/naiyo.html$ index/aruyo.html [R=301]
みたいなヤツ、頭痛がするね…
でも日本語で説明すると簡単で
URL書き換え アクセスされたURLの正規表現 リダイレクト先のURL [オプション配列]
って感じ。

RewriteRule ^index/naiyo.html$ index/aruyo.html [R=301]

「index/naiyo.htmlにアクセスされたらindex/aruyo.htmlに301リダイレクトしますよ」
ってこと。

STEP3:.htaccessをサーバーにアップロードしてWIN!

ね?簡単でしょ??
でも、のび太くんは色々疑問があるみたいだね

?1:正規表現ってなんや?

ググれ
と言ってものび太くんは泣いてしまうから、簡単に説明しよう。

.htaccessで使う正規表現は
ハットと呼ばれる^と、ドルと呼ばれる$の間に書くんだ

例えば^page1$という正規表現を書くと
pageはミスマッチ
page1はマッチ
page2はミスマッチ
page30はミスマッチ
となる。

でもそれだけじゃ柔軟性が無いので
何でも良い1文字を表す.と、0文字以上を表す*、1文字以上を表す+を使っていく

例えば^page.*という正規表現を書くと
pageはマッチ
page1はマッチ
page2はマッチ
page30はマッチ
となる。

そして^page.+$という正規表現を書くと
pageはミスマッチ
page1はマッチ
page2はマッチ
page30はマッチ
となる。

*+は挙動が少し違うから注意が必要!
あと.というものが存在するので、ドットを正規表現に含めたいときは\.という感じにエスケープしなければならない。

?2:[オプション配列]のR=301ってなんや

簡単にいうとリダイレクト(redirect)の設定を指定しているんだ。
R=301は301リダイレクト、恒久的なページ移動の際の設定。
R=302は302リダイレクト、一時的なページ移動の際の設定。
基本的にはSEO的に301リダイレクトのほうがページ評価を引き継げるのでR=301のほうが使われやすい。

他にもLQSAなどがあり
Lはlastを表し、Rewrite判定の終了。
QSAはquery string appendを表し、クエリパラメータの変更や追加に使う。

複数のオプションを指定するときは
[R=301,L]みたいにカンマ区切りで書くと良い。
順番は関係無いよ。

編集後記

入社初日で教えてもらったことを、ググりながら深掘りしたので記事書きました。
他にも「RewriteCond」やら「httpd.conf」やら色々あるみたいで、沼が深い!!
正規表現も徐々に慣れていかないとなぁ…