件名: 404 Errorページについて

投稿日: 06/09/14 11:33 AM JST
投稿者: yuru

存在しないURLを入力したばあいに表示されるページをカスタマイズするには、どうしたらいいでしょうか?

このサイトのように


404 Error
https://www.geeklog.jp/**/はどこにも見つかりませんでした。

指定したファイルは存在しません。メインページをチェックしたり、検索ページで探してみてください。

のうように、表示できるとよいのですが・・・

書込: 404 Errorページについて

投稿日: 06/09/14 11:50 AM JST
投稿者: Ivy

ぜひこのWikiご覧ください。
http://wiki.geeklog.jp/index.php?title=404エラーのページをカスタマイズする

CUSTOM_handle404()を設置して、
http://www.ossj.jp/a
このようにカスタマイズも簡単ですよ Smile

書込: 404 Errorページについて

投稿日: 06/09/14 05:11 PM JST
投稿者: yuru

Wikiページに
lib-custom.phpに、COM_handle404()のソースを元に、CUSTOM_handle404()を設置します。
とありましたが、COM_handle404()がどこにあるのか、わかりませんでした。

お手数おかけして、申し訳ありまん・・・ Cry

書込: 404 Errorページについて

投稿日: 06/09/14 06:02 PM JST
投稿者: Ivy

Quote by: yuru

Wikiページに
lib-custom.phpに、COM_handle404()のソースを元に、CUSTOM_handle404()を設置します。
とありましたが、COM_handle404()がどこにあるのか、わかりませんでした。

お手数おかけして、申し訳ありまん・・・ Cry



あ、説明不足でした。
COM_ とあることから、lib-common.phpです。

COM_ .... lib-common.php
その他の接頭子は、system 以下のプログラムです。

SEC_ ... lib-security.php
DB_... lib-database.php
という具合です。

書込: 404 Errorページについて

投稿日: 06/09/14 07:10 PM JST
投稿者: Ivy

ちなみに、OSS Japanでは以下のようにしています。

1.追加:
custom_handle404.php

PHP Formatted Code
<?php

if (strpos(strtolower($_SERVER['PHP_SELF']), 'custom_handle404.php') !== false) {
    die('This file can not be used on its own!');
}

function CUSTOM_handle404($alternate_url = '')
{
    global $_CONF, $_USER, $LANG_404;


    // send 404 in any case
    header('HTTP/1.1 404 Not Found');
    header('Status: 404 Not Found');

    $display .= COM_startBlock($LANG_404[1]);
    if (isset($_SERVER['SCRIPT_URI'])) {
        $url = strip_tags($_SERVER['SCRIPT_URI']);
    } else {
        $request = $_SERVER['REQUEST_URI'];
        $url = 'http://' . $_SERVER['HTTP_HOST'] . strip_tags($request);
    }

    // Add log stuff
    if (isset($_USER['uid'])) {
        $byuser = $_USER['uid'] . '@' . $_SERVER['REMOTE_ADDR'];
    } else {
        $byuser = 'anon@' . $_SERVER['REMOTE_ADDR'];
    }
    $refurl = $_SERVER['HTTP_REFERER'];
    $remoteaddress = $_SERVER['REMOTE_ADDR'];
    $timestamp = @strftime( '%c' );
    $logentry = "404 Error generated by $byuser for url: $url - Referring url: $refurl";
    $logfile = $_CONF['path_log'] . '404.log';
    if (!$file = fopen($logfile, 'a')) {

    } else {
        fputs( $file, "$timestamp - $logentry
"
);
    }

    $display .= CUSTOM_getStaticpage('404');

    $display .= sprintf($LANG_404[2], $url);
    if ($alternate_url != '') {
        $display .= sprintf($LANG_404[4], $alternate_url);
    } else {
        $display .= $LANG_404[3];
    }
    $display .= COM_endBlock();
    // $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG_404[1]));
    $display = COM_createHTMLDocument($display, array('what' => 'none', 'pagetitle' => $LANG_404[1], 'rightblock' => false));
    COM_output($display);    
    exit; // Do not want to go any further
}
 


2.編集:lib-custom.php 追加
/* 404 */
require_once( 'custom/custom_handle404.php' );

3.静的ページ ID: 404 を作成

書込: 404 Errorページについて

投稿日: 06/10/14 10:08 AM JST
投稿者: yuru

Geeklog本体のバージョンは2.0.0 ですが、lib-common.php に「COM_handle404()」が見当たりませんでした。

教えていただいたものを、そのままlib-custom.php に追加してみたいと思います。

書込: 404 Errorページについて

投稿日: 06/10/14 04:21 PM JST
投稿者: Ivy

であれば2.1.0 から追加されたものだと思います。
404.phpを以下のようにご編集ください。


PHP Formatted Code
<?php

/* Reminder: always indent with 4 spaces (no tabs). */
// +---------------------------------------------------------------------------+
// | Geeklog 1.6                                                               |
// +---------------------------------------------------------------------------+
// | 404.php                                                                   |
// |                                                                           |
// | Geeklog "404 Not Found" page                                              |
// +---------------------------------------------------------------------------+
// | Copyright (C) 2000-2009 by the following authors:                         |
// |                                                                           |
// | Authors: Tony Bibbs        - tony AT tonybibbs DOT com                    |
// |          Jason Whittenburg - jwhitten AT securitygeeks DOT com            |
// |          Dirk Haun         - dirk AT haun-online DOT de                   |
// +---------------------------------------------------------------------------+
// |                                                                           |
// | This program is free software; you can redistribute it and/or             |
// | modify it under the terms of the GNU General Public License               |
// | as published by the Free Software Foundation; either version 2            |
// | of the License, or (at your option) any later version.                    |
// |                                                                           |
// | This program is distributed in the hope that it will be useful,           |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             |
// | GNU General Public License for more details.                              |
// |                                                                           |
// | You should have received a copy of the GNU General Public License         |
// | along with this program; if not, write to the Free Software Foundation,   |
// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
// |                                                                           |
// +---------------------------------------------------------------------------+

require_once 'lib-common.php';

CUSTOM_handle404();

?>



書込: 404 Errorページについて

投稿日: 07/26/15 09:57 PM JST
投稿者: みるく

横からすみません。
私も404ページを作成したかったのですが、lib-common.php に「COM_handle404()」が見当たらなかったので、
下記の事を試しました。

1.上記のように記述したcustom_handle404.phpを新規作成して
  system/custom/ におく。

2.system/lib-custom.php に下記を追記する。
/* 404 */
require_once( 'custom/custom_handle404.php' );

3.静的ページ ID: 404 を作成。

4.404.phpを上記のように修正。

5.公開領域に
  ErrorDocument 404 /404.php
  と記述した .htaccess をおく。

これを何度か試してしてみたのですが、「404」としか表示されませんでした。
(カスタマイズされたページが表示されません><Wink

原因として思い当たるのは4くらいなのですが、
静的ページの内容やページタイトルはどのように記述すればいいのでしょうか?
設定はPHPを実行するにチェックでいいんですよね?

他にカスタマイズされたページが表示されない原因がありましたら教えていただけますでしょうか?
よろしくお願いします。

書込: 404 Errorページについて

投稿日: 07/27/15 01:49 AM JST
投稿者: Ivy

ファイルがなければ404のあじけないメッセージではなく、写真やキャラクターをデザインした内容の静的ページ404を表示する方法を紹介していました。
静的ページには、表示したいファイルがありませんよ~というデザインになっていればOKです。

たとえばこのサイトでは、
https://www.geeklog.jp/staticpages/index.php/404

という静的ページ「404」を作成しています。

ファイルがなければ、これを表示します。

https://www.geeklog.jp/a

こんなぐあいに・・・

custom関数は、
https://github.com/ivywe/geeklog-ivywe/blob/master/system/custom/custom_handle404.php

書込: 404 Errorページについて

投稿日: 07/27/15 01:56 AM JST
投稿者: Ivy

静的ページの内容やページタイトルはどのように記述すればいいのでしょうか?
設定はPHPを実行するにチェックでいいんですよね?


静的ページを、どういうモードで作成しても構いません。
ただ、静的ページ404を表示したとき、きちんと表示されるページであることは確認してください。

通常、PHPを実行する モードにはしません。
ふつうに、画像やテキストなどを配置するだけです。
PHPを実行する モードでページを作成してもかまいませんが、そうしなければならない理由はまったくありません。

$display .= CUSTOM_getStaticpage('404'Wink;

この関数で、静的ページ404を読み込んでいるわけですが、タイトルは取り込まず、本体コンテンツだけ取り込んでいます。
そのためタイトルはどうセットしても無視されますのでなんでもよいです。

書込: 404 Errorページについて

投稿日: 07/27/15 09:42 AM JST
投稿者: みるく

Quote by: Ivy

ファイルがなければ404のあじけないメッセージではなく、写真やキャラクターをデザインした内容の静的ページ404を表示する方法を紹介していました。
静的ページには、表示したいファイルがありませんよ~というデザインになっていればOKです。

たとえばこのサイトでは、
https://www.geeklog.jp/staticpages/index.php/404

という静的ページ「404」を作成しています。

ファイルがなければ、これを表示します。

https://www.geeklog.jp/a

こんなぐあいに・・・

custom関数は、
https://github.com/ivywe/geeklog-ivywe/blob/master/system/custom/custom_handle404.php


ご教示いただき、ありがとうございます。よくわかりました。

静的ページを、どういうモードで作成しても構いません。


こちらも返答ありがとうございます。わかりました。
静的ページで何を表示させるのかわからなかったのと、PHPの記述を書くのだと思ってた事から
この質問をさせていただきました。


1.上記のように記述したcustom_handle404.phpを新規作成して
  system/custom/ にcustom_handle404.phpのファイルをおく。

2.system/lib-custom.php に下記を追記する。
/* 404 */
require_once( 'custom/custom_handle404.php' );

3.静的ページ ID: 404 を作成。

4.404.phpを上記のように修正。

5.公開領域に
  ErrorDocument 404 /404.php
  と記述した .htaccess をおく。

↑上記の通り作業を再度してみたのですが、「404」と表示されるだけでカスタマイズした404ページが表示されない状態です><

何か間違っている箇所や抜けている事ありますでしょうか?

書込: 404 Errorページについて

投稿日: 07/27/15 09:56 AM JST
投稿者: Ivy

静的ページの404 は、問題なく内容が表示されているでしょうか。
/staticpages/index.php/404

このなかみを表示します。
アクセス権のパーミッションは、3 2 2 2 になっているでしょうか。

Geeklog 2.1では標準機能なので、2.1へのアップグレードも試してみてください。
ivywe版では、最初から静的ページ404を表示するよう.htaccessをセットしていますので参考にしてみてください。

書込: 404 Errorページについて

投稿日: 07/27/15 12:14 PM JST
投稿者: みるく

Quote by: Ivy

静的ページの404 は、問題なく内容が表示されているでしょうか。
/staticpages/index.php/404

このなかみを表示します。
アクセス権のパーミッションは、3 2 2 2 になっているでしょうか。

Geeklog 2.1では標準機能なので、2.1へのアップグレードも試してみてください。
ivywe版では、最初から静的ページ404を表示するよう.htaccessをセットしていますので参考にしてみてください。



はい。静的ページの404 は、問題なく内容が表示されています。
パーミッションの設定も問題ないです。

Geeklog2.1.0のサイトでも同様の事を試しましたが、「404」しか表示されませんでした。

lib-custom.phpに、COM_handle404()のソースを元に、CUSTOM_handle404()を設置します。


この意味がわからないのですが、lib-custom.phpファイルに
lib-common.phpファイルに記述してあるCOM_handle404()の記述部分をコピペするという事でしょうか?
(これは試しましたがページが真っ白に表示されてしまったのでやめました)

IVYさんがここで教えてくださった方法だと、
lib-custom.phpファイルにcustom_handle404の記述を追記するという事でしょうか?
(これも試しましたがページが真っ白に表示されてしまったのでやめました)

それとも私が先ほど書いた1~5の作業で間違いはないのでしょうか?
(2.1.0のサイトでは404.phpは修正していません)

書込: 404 Errorページについて

投稿日: 07/27/15 04:46 PM JST
投稿者: Ivy

lib-custom.phpに、COM_handle404()のソースを元に、CUSTOM_handle404()を設置します。


これが、
https://github.com/ivywe/geeklog-ivywe/blob/master/system/custom/custom_handle404.php

です。CUSTOM_handle404()がこのcustom_handle404.phpに書かれていることを確認してください。
単純にこのソースファイルをcustom以下にアップロードして、lib-custom.phpから呼べばよいです。

https://github.com/ivywe/geeklog-ivywe/ この、system/lib-custom.php, system/custom/custom_handle404.php この
ふたつのソースを参考にしてください。

まっしろになった場合、エラーの表示を禁止しているためですので、エラーをかならず表示して、原因を確認してみてください。

書込: 404 Errorページについて

投稿日: 07/27/15 06:45 PM JST
投稿者: みるく

Quote by: Ivy

lib-custom.phpに、COM_handle404()のソースを元に、CUSTOM_handle404()を設置します。


これが、
https://github.com/ivywe/geeklog-ivywe/blob/master/system/custom/custom_handle404.php

です。CUSTOM_handle404()がこのcustom_handle404.phpに書かれていることを確認してください。
単純にこのソースファイルをcustom以下にアップロードして、lib-custom.phpから呼べばよいです。

https://github.com/ivywe/geeklog-ivywe/ この、system/lib-custom.php, system/custom/custom_handle404.php この
ふたつのソースを参考にしてください。



CUSTOM_handle404()がcustom_handle404.phpに書かれていることを確認し、
再度試したのですがだめでしたorz

ivyweさんのは見る事が出来ないと思ったので、ここの設定を確認したのですが、
記述は間違っていなかったです。

2.1.0のサイトでも同じ状態なのでバージョンが原因ではないようです。

IVYさんのアドバイスは理解して作業しているのですが、まだ ここのような404ページを表示する事が出来ません。

書込: 404 Errorページについて

投稿日: 07/27/15 07:19 PM JST
投稿者: Ivy

ivywe版のurlを紹介していますが、
見れないと思ったのはなぜでしょお?

ダウンロードして見ていただけますか?

書込: 404 Errorページについて

投稿日: 07/27/15 08:44 PM JST
投稿者: みるく

Quote by: Ivy

ivywe版のurlを紹介していますが、
見れないと思ったのはなぜでしょお?

ダウンロードして見ていただけますか?



すみませんでした。
ivywe版の記述と見比べてみたのですが同じでした。
つまり おかしい所は見当たりませんでした。
サーバーによって違いがあるという事ありますでしょうか?

書込: 404 Errorページについて

投稿日: 07/27/15 08:55 PM JST
投稿者: Ivy

lib-custom.phpで、

/* 静的ページコンテンツの内容を返す */
require_once( 'custom/custom_getstaticpage.php' );

こちらはどうなっているでしょうか。
静的ページのコンテンツを読み込むカスタム関数です。

こちらが必要だということを説明し忘れていたかと,,,

日本語拡張版では、この関数が入っているのですが、日本語標準版だと、入っていません。

書込: 404 Errorページについて

投稿日: 07/27/15 10:38 PM JST
投稿者: Ivy

あと、画面がしろくなる件については、静的ページを読み込む関数が無い というエラーメッセージだったのではないでしょうか。

エラーメッセージは表示させてそれをご連絡いただくと解決が早くなるのですが。

エラーを表示する方法はこちらです。

PHPのエラーを表示する方法:
http://wiki.geeklog.jp/index.php/Htaccess#PHP.E3.81.AE.E3.82.A8.E3.83.A9.E3.83.BC.E3.82.92.E8.A1.A8.E7.A4.BA.E3.81.99.E3.82.8B.E6.96.B9.E6.B3.95

書込: 404 Errorページについて

投稿日: 07/28/15 09:58 AM JST
投稿者: みるく

Quote by: Ivy

lib-custom.phpで、

/* 静的ページコンテンツの内容を返す */
require_once( 'custom/custom_getstaticpage.php' );

こちらはどうなっているでしょうか。
静的ページのコンテンツを読み込むカスタム関数です。

こちらが必要だということを説明し忘れていたかと,,,

日本語拡張版では、この関数が入っているのですが、日本語標準版だと、入っていません。


説明ありがとうございます。この記述も入ってます。。。

あと、画面がしろくなる件については、静的ページを読み込む関数が無い というエラーメッセージだったのではないでしょうか。

エラーメッセージは表示させてそれをご連絡いただくと解決が早くなるのですが。

エラーを表示する方法はこちらです。

PHPのエラーを表示する方法:
http://wiki.geeklog.jp/index.php/Htaccess#PHP.E3.81.AE.E3.82.A8.E3.83.A9.E3.83.BC.E3.82.92.E8.A1.A8.E7.A4.BA.E3.81.99.E3.82.8B.E6.96.B9.E6.B3.95

こちらもご教示ありがとうございます。こちらの件は自己解決できました。

書込: 404 Errorページについて

投稿日: 07/28/15 01:44 PM JST
投稿者: Ivy

.htaccess が有効なサーバーでしょうか。

有効かどうか、404.phpを、ただ、

echo "404 test!";

とだけ記述して有効かどうかテストしてみてください。

書込: 404 Errorページについて

投稿日: 07/28/15 01:44 PM JST
投稿者: みるく

htaccess が有効なサーバーではなかったので、SEの方にお願いして有効にしてもらいました。
その後、404.phpで静的ページのID404ページを呼び出すようにしました。
404ページちゃんと表示されるようになりました。
長々とお付き合いいただきありがとうございましたm(..)m

書込: 404 Errorページについて

投稿日: 12/13/15 05:44 PM JST
投稿者: Ivy

custom_handle404.phpをサンプルとして公開しました。
https://github.com/Geeklog-jp/geeklog-japan/blob/master/extended/system/custom/custom_handle404.php

静的ページid 404 で作成しておけば、その内容を表示してくれます。

PHP Formatted Code
$display .= CUSTOM_getStaticpage('404');
 


CUSTOM_getStaticpageも、カスタム関数で提供しているのでそれを活用してください。


Geeklog Japan - 掲示板
https://www.geeklog.jp/forum/viewtopic.php?showtopic=18239