ホーム

OFF-SOFT.net

OFF-SOFT.net

ウェブやソフトウェアに関するサポート&情報サイトです。サイト構築からソフトウェアの作成、利用まであなたの助けになるかも・・・・しれません。たぶん・・。

リダイレクトと404ページを制御する

公開日| 2009年04月04日 | コメントはまだありません。

 よく、記事やカテゴリが増えてくると、メニューの書き換えや、構成を変更をしたくなります。  この場合、問題なのが、せっかく、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

もっと詳しく知りたい場合は、以下のページを参照いただければ、更に詳しい情報があるでしょう。
Redirect ディレクティブ
http://httpd.apache.org/docs-2.2/ja/mod/mod_alias.html#redirect

RedirectMatch ディレクティブ
http://httpd.apache.org/docs-2.2/ja/mod/mod_alias.html#redirectmatch


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!では?)、動作しないことがああります。
(※問題の本当の原因は???)
もっと詳しく知りたい場合は、以下のURLで説明があるので参考にしてもらいたい。
ErrorDocument ディレクティブ
http://httpd.apache.org/docs/2.2/ja/mod/core.html#errordocument

上記のやり方は、Joomla!としては、本来のやり方ではでないようです。
http://docs.joomla.org/Tutorial:Advanced_topicsのCustom error pagesを参照。
Joomla!でのエラーページのカスタマイズ方法は、以降に記述するやり方のようです。

次のステップで、Joomla!テンプレートの設定で404を独自のページへ移動させてみましょう。

STEP.3 Joomla!テンプレートの設定で404を独自のページへ移動させる
 次は、404をJoomla!のテンプレート機能を使って、別のページ(Joomla!の標準の404でない)へ移動させることを考えてみましょう。
 これは、単純です。(いろんなフォーラムのページで紹介されている)
  1. 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/は、あなたのサイト名です。

  2. 404のエラーが発生した時に見せたいページ(HTML)を作成し、error404.htmlとして保存する。

  3. 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;
	}
?>

-->

コメント

コメントをどうぞ







  • はてなブックマークへ追加する
  • Facebookでシェアする
  • twitter でつぶやく
  • Google Plusでシェアする
  • Pocketでシェアする
ページトップへ