注:このページの情報は断片的かつ不完全なものです。
要点のみ読みたい場合はさくらのスタンダードで404ページを作成(最終版)にアクセスして下さい。

サイト内関連ページ

 

以下本文

ようやく404ページ、403ページが思い通りの作動をするようになったのでメモ。

どうもマルチドメインが悪戯をしていたのではなく、
拡張子htmlのファイルをphpとして作動させていたのがダメだったみたい。

404ページが上手く飛ばない条件と解決方法

さくらのレンタルサーバで

Action myphp-script /php.cgi
AddHandler myphp-script .php .html

などとやって(参考:さくらのレンタルサーバでhtmlをphpとして作動させたい)hmtlをphpとして作動させていると、.htaccess内に

ErrorDocument 404 /404.html

と記述しても、拡張子.html、.phpのファイルを指定した時のみ、500エラーが発生します。
(他の拡張子や、拡張子無しの時は上手くジャンプする)
(403ページはhtmlやphpでもジャンプするっぽい。)

と言う事で、.htaccess内に

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} "\.(php|html)$"
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .+ /404.html [L]

上記のような条件文を付けた所、ようやく思ったような挙動をするようになりました。
(場合によっては404.HTMLではなく、404HTMでnot foundページを作成する必要があるかも。)

上手く作動しない場合(2010.02.17一部加筆)

マルチドメインを使っている場合などは、大元のルート
(xxxx.sakura.ne.jp)に「ErrorDocument 404 /404.html」を置いて、
404.htmlや403.htmlのファイル自体は、それぞれのドメインのルートに設置。
これはサブドメインだろうが、ルートドメインだろうが一緒。
「ErrorDocument 404 /404.html」の記述は「ルートディレクトリ」に一個だけ。
下層ディレクトリに置くと500エラーが出ます。

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} "\.(php|html)$"
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .+ /404.html [L]
はマルチドメイン側のhtaccessに置くと作動すると思います。

今日も4時間くらい悪戦苦闘した。
週1ペースでチャレンジしてたとは云え、解決までに1ヶ月以上かかったのか、、、長かった('Α`)

サイト内関連ページ