注:このページの情報は断片的かつ不完全なものです。
要点のみ読みたい場合はさくらのスタンダードで404ページを作成(最終版)にアクセスして下さい。
サイト内関連ページ
- さくらのレンタルサーバで404ページが上手く作れない:その1
- さくらのレンタルサーバで404ページが上手く作れない:その2
- さくらのレンタルサーバで404ページが上手く作れない:その3 (このページ)
- さくらのスタンダードで404/403/503ページ作成
- さくらのスタンダードで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ヶ月以上かかったのか、、、長かった('Α`)