.htaccess、トップ以外のアクセスをトップにリダイレクトする方法

謎のプリン語る。
プログラミングの役立つ情報とか、どうでもいい雑談とか書いてます。
一人書く人増えました。

.htaccess、トップ以外のアクセスをトップにリダイレクトする方法

みやびプリン 500 316

144 144

※この記事は10年以上前の記事です。
現在は状況が異なる可能性がありますのでご注意ください。

さて、仕事の合間だけど、備忘録として。
今回は、WEBやるうえでは、一つ課題になる、リダイレクトに関してだ。

たとえばサイトを休止したい時、
サーバー内のファイルを残したまま、ページを隠したい、
なんて要望に応えるには、リダイレクトで全てのページへのアクセスを、
休止用HTMLにリダイレクトするのが一番いい。

方法は大きく分けて二つ。

  • 各ページにリダイレクトのmetaタグを入れる
  • .htaccessを使う

metaの書き方は下記

<meta http-equiv="refresh" content="秒数;URL=URL">

しかし、今回のようにページ全てとなると、これはめんどい。
というわけで、.htaccessを使う方法。これしかない。

.htaccess リダイレクト トップ以外

なんてキーワードでググれば、
だいたいは下記記述にあたるだろう。

RewriteEngine on

RewriteCond %{REQUEST_URI} !^/index.html$
RewriteRule ^(.*)$ /index.html [L,R]

解説すると、RewriteCond %{REQUEST_URI} !^/index.html$で、
トップページは除外しますよ、と指定。
RewriteRule ^(.*)$ /index.html [L,R]
全部のファイルを、トップへという指定だ。

しかし、これが、とにかくできない・・・!
どんなにやっても、できない!
リダイレクトループも発生して、
お手上げ!
いろいろ書き方試して、リダイレクトできるようになっても、
たとえば/about/index.htmlでアクセスすると、
画像とかCSSが効いてないページが表示される。
(※この時、/about/では上手くいった)

そう、この記述、一行足りないのだ。
下記記述であれば、完璧である。

RewriteEngine on

RewriteBase /

RewriteCond %{REQUEST_URI} !^/index.html$
RewriteRule ^(.*)$ /index.html [L,R]

このRewriteBase /これが大事。
意味は、ベースのパスはここですよ!って意味。
/だけを書けば、ルートをベースに指定できる。

つまり、上の方の書き方だと、
index.htmlだったらなんでも除外するよ!」
ってことになる。
たとえば、/about/index.htmlも除外するため、
/about/index.htmlにアクセスした時はリダイレクトされない。

パスを/から始めている意味がなくなっているのだ。
(パスを指定する時、/から始めると、サーバードキュメントのルートからのパスになる。)

よって、ベースをルートに指定してやればいいのだ。
そうすれば、/からパスを始めると、ルートをからに指定できるのだ。

下の書き方ならば、
「ルート階層にあるindex.htmlだけ除外するよ!」
とできるわけ。

ちなみに、ググった時に、
RewriteBase /をしっかり記述している記事は、
ほとんどない(怒)

それくらい.htaccessの常識ってこと・・・?

プロが選ぶWordPressテーマテンプレート【LIQUID PRESS】 - メイン

トラックバック(0)

トラックバックURL:

コメントする

ページトップへ戻る