リダイレクトと404ページを制御する
ご利用のブラウザは、JavaScript が無効 となっていませんか?
このサイトでは、コンテンツの一部が非表示 、あるいは、コメント、お問い合わせの投稿ができない 、検索ができない ことがあります。
よく、記事やカテゴリが増えてくると、メニューの書き換えや、構成を変更をしたくなります。
この場合、問題なのが、せっかく、GoogleやYahooなどの検索エンジンで上位に表示されるページでも、古いURLにリンクされたままになることです。
メニューの書き換えや、略称などの変更を行ってしまうと、検索結果からサイトへきた人に、Joomla!の標準で用意されている404のページが表示されてしまいます。
このページは、赤い画面が印象的すぎて(標準色)、エラーの印象を強くあたえてしまい、さらに、このサイトがなくなったような印象さえあたえてしまうこともあります。
この問題を、緩やかに解消させるに、リダイレクトと404のページを、もっと、やわらかい印象のページへ変更したいと考えたくなるでしょう。
ここでは、そんなことを考えてみましょう。
STEP.1 Apache のリダイレクト機能を使ってみる
昨今の、WEBサーバのシェアは、50%がApacheだそうだ。追随するサーバは、IISらしいです。
ここでは、Apache のリダイレクト機能(Redirect,RedirectMatch)を使ってみましょう。
Apache には、.htaccess というファイルでディレクトリの管理を行うことができます。
.htaccess が存在するディレクトリ配下を、その中に記述された情報でコントロールすることができます。
また、その配下のディレクトリ毎に、同じように.htaccessが存在すれば、直近の.htaccessの内容が優先されます。
実際に、リダイレクトさせるためには、
.htaccess のファイルに以下のように記述すれば良いです。
Redirect permanent /test/ http://www.sample.com/test2/
上記の記述では、
このWEBサーバの/test/ にアクセスしたものは、http://www.sample.com/test2/ へリダイレクトする
という意味になります。
さらに個別のページをリダイレクトさせたい場合は、以下のようにその個別のページを記述すれば良いです。
Redirect permanent /test/sample.html http://www.sample.com/test2/sample2.html
さらに名前を加工して飛ばしたい場合、
RedirectMatch を使えば良いです。
RedirectMatch permanent (.*)\.htm$ http://www.sample.com$1.html
この例は、全ての
.htm と言う拡張子は、
.html へ変換することを意味します。
例)
http://www.sample.com/test/
1.htm → http://www.sample.com/test/
1.html
STEP.2 Apache のエラードキュメント機能を使ってみる
次は、404を同じようにApacheの機能を使って、別のページ(Joomla!の標準の404でない)へ移動させることを考えてみましょう。
これは、Apacheの機能から考えれば、以下のようにすれば良いように思います。
ErrorDocument 404 http://www.sample.com/error404.html
これは、
404のエラー(指定されたページが存在しないエラー)の場合、http://www.sample.com/error404.html を表示しなさい
とApacheへ指定しているわけでですが、サーバによっては(Joomla!では?)、
動作しないことがああります。
(※問題の本当の原因は???)
次のステップで、Joomla!テンプレートの設定で404を独自のページへ移動させてみましょう。
STEP.3 Joomla!テンプレートの設定で404を独自のページへ移動させる
次は、404をJoomla!のテンプレート機能を使って、別のページ(Joomla!の標準の404でない)へ移動させることを考えてみましょう。
これは、単純です。(いろんなフォーラムのページで紹介されている)
error.phpというファイルをUTF-8Nで作成します。
※これは、/template/system/error.php を自身が使うデフォルトのテンプレートディレクトリへコピーして変更するのが最も安全です。
内容は、以下のような内容です。
1
2
3
4
5
6
7
<?php
defined ( '_JEXEC' ) or die ( 'Restricted index access' ) ;
if ( ( $this -> error -> code ) == '404' ) {
header ( 'Location:http://www.example.com/error404.html' ) ;
exit ;
}
?>
http://www.example.com/は、あなたのサイト名です。
404のエラーが発生した時に見せたいページ(HTML)を作成し、error404.htmlとして保存する。
error.php と error404.html をサーバへアップロードする。
error.phpは、あなたが使っているテンプレートのフォルダへ
例)
/template/あなたが使っているテンプレート名/error.php
error404.htmlは、あなたのWEBサーバのルートディレクトリへ
例)
/error404.html
最後に、おまけ
最近では、URLの先頭にwwwをつけても、つけなくても同じ内容へアクセスできるようになっていることがよくあります。
これは、ユーザにとっては、良いことかもしれませんが、GoogleやYahooでは、別のサイトと認識されかねません。
ここで、.htaccessを使って、wwwをつけずにアクセスした場合に、リダイレクトして、必ず、wwwをつけてあげることを
記述してみましょう。
Joomla!では、デフォルトでリダイレクトのルール設定の記述があるため、先頭におくの肝要です。
一般的なwwwをつける場合記述例)
※RewriteEngine Onの元のソース位置の
直下 に記述する。
RewriteEngine On
RewriteCond %{HTTP_HOST} ^exmaple\.com$ [NC]
RewriteRule ^(.*)$ http://www.exmaple.com/$1 [R=301,L]
または、以下のような記述でもの良い。
※RewriteEngine Onの元のソース位置の
直下 に記述する。
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.exmaple\.com$ [NC]
RewriteRule ^(.*)$ http://www.exmaple.com/$1 [R=301,L]
この記事の設定で、Googleウェブマスターから認証に失敗するようになったら、以下のページを参照してください。
1
2
3
4
5
6
7
8
<?php
defined ( '_JEXEC' ) or die ( 'Restricted index access' ) ;
if ( ( $this -> error -> code ) == '404' ) {
header ( "HTTP/1.0 404 Not Found" ) ;
header ( 'Location: ' . $this -> baseurl . 'error404.html' , false , 404 ) ;
exit ;
}
?>
コメントをどうぞ