Illust & Music 月の高いところ

今日のプリン言

謎のプリン語る。
一人書く人増えました。

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

2013年05月31日

みやびプリン 140 87

144 144

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

さて、仕事の合間だけど、備忘録として。
今回は、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]"で
全部のファイルを、トップへという指定だ

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

しかし、これが、とにかくできない・・・!
どんなにやっても、できない!
リダイレクトループも発生して、
お手上げ!
いろいろ書き方試して、リダイレクトできるようになっても、
たとえば"/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の常識ってこと・・・?

格安でソーシャルゲームイラストを構築します【EAGLEGRAPHICS】 - メイン

トラックバック(0)

トラックバックURL:

コメントする