IT関連お悩み解決

SIRIUSでエラーページを表示させる方法

 ブラウザでサイトにアクセスする際、指定されたファイルがない場合は「404 Not found」などのエラーページが表示されます。
 しかしSIRIUSを使う場合、次の理由により、iPhone(スマホ)のエラーページを作ることが難しいという問題があります。

 

1. サーバ側のエラーページ設定機能を使えないことあある

 

 サーバ側では、サイトフォルダ内のhtaccessを書き換えることで、エラーページを設定する機能を用意していることがあります。
 ところがSIRIUSは、サイト生成するたびにhtaccsessを書き直すため、前述の設定を上書きしてしまいます。
 このためサーバ環境によっては、サーバ側のエラーページ設定機能を使えないことがあります。

 

 ※ロリポップはこのタイプです。

 

2. SIRIUSではiPhone(スマホ)のエラーページをカスタマイズできない

 

 SIRIUSではスマホからアクセスがあった場合、スマホフォルダのredirect.phpを経由するよう、URLが書き換えられます。

 

 指定したURLのファイルがなくても、redirect.phpに書き換えられるため、404とはなりません。

 

 そのため、SIRIUSのhtaccses設定機能で、次のような404エラーをキャッチする文を書いても、スマホでは無視されてしまいます。
 ErrorDocument 404 /error.html

 

 さらにredirect.php内では、URLで指定したファイルが見つからない場合、header("HTTP/1.0 404 Not Found"); が実行されます。
 これによりブラウザ固定の404ページが表示されます。

 

 このredirect.phpはユーザで書き換えることができません。直接redirect.phpファイルを開いて修正しても、SIRIUSでサイト生成時にデフォルトに戻ってしまいます。
 よってiPhone(スマホ)のエラーページを設定したり、表示させることができません。

解決方法

 以下のようにすればSIRIUSにおいても、スマホでエラーページを表示することができます。もちろんPCでも表示されます。

 

①エラーページを用意する。
 SIRIUSでサイト内にエラーページを作ります。
 公開設定は”メニューのみ非公開”にしてください。

 

 例
 https://itclear.nerim.info/404-error.html

 

②サイトフォルダに次のファイルを設置する。
 ファイル名:404-error.php

 

 ファイルの中身

 

<?php
header("HTTP/1.1 404 Not Found", false, 404);
$url = "https://itclear.nerim.info/404-error.html";
$ua = $_SERVER['HTTP_USER_AGENT'];
$options['ssl']['verify_peer']=false;
$options['ssl']['verify_peer_name']=false;
$options['http']['header']="User-Agent:" . $ua;
$response = file_get_contents($url, false, stream_context_create($options));
echo $response;

 

exit;

 

 

※PHP5.6で動作確認
※URLは各々のエラーページのものに変えてください。

 

③SIRIUSのhtaccess設定機能を使って、次の文を追加する。

 

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*\.html$ /404-error.php [L]

動作解説

(1)存在しないURLにアクセスすると、③で修正したhtaccsesにより、404-eroor.phpが実行されます。
※ここでエラーページに書き換えれば手っ取り早いと思われるかもしれませんが、そうするとファイルが存在しないのにも関わらず404エラーとならないので、Googleクローラを困らせてしまいます。

 

(2)404-error.phpが実行されると、404エラーを返し、file_get_contentsによりエラーページのコンテンツを読み込んで、ブラウザに表示します。
※phpファイルで404エラーを設定したヘッダーを返すことで、Googleに正しく、リンク切れを通知することができるのです。
※エラーページ内の画像やスタイルシートがリンク切れする場合は、ページ内に記述してる相対パスを絶対パスに変更してください。(テンプレートの <% pageDepth %> を<% siteUrl %> に変えるなど)