当サイトオリジナルのエラーページを設置しました。
Summary
- SELinuxコンテキストと403エラーの記事で経験した403エラーを契機に、オリジナルのエラーページを設置することとしました
- 今回、[Page Not Found]の404 Errorと[Forbidden]の403 Errorのページを作成します
- Webサイトデザインの統一性を図るため、Cassiopeia Templateを利用します
Reference
- Joomla Documentation | Custom Error Pages
- 今回採用した設置方法になります
- Site Moduleを使用します
- Joomla! 5 デフォルトのCassiopeiaテンプレートに403 Errorと404 Error用の専用Position(error-403, error-404)が用意され、専用Moduleを作成するだけで、オリジナルエラーページを表示することが可能となりました
- 仕組みとしては、エラー発生時、error.phpにPosition:error-403又はerror-404が指定されたモジュールを書き出し、エラーページが表示されるようです
- Basic Joomla Tutorials | How to Make a Custom 404 Error Page for Joomla Website
- 参照Aの方法が登場する前でしたら、この設置方法でした
- MenuとArticleを使用します
- 作成した専用Articleを表示するMenuをerror.phpに組み込みます
- Web-eau.net | How To Create a Custom 404 Error Page in JoomlaWeb-eau.net | How To Create a Custom 404 Error Page in Joomla
- 参照B作成者が引用しているサイトです
404 Error Setting Procedure
参照Aによる[Page Not Found]を警告するオリジナル404 Errorの設置手順になります。
Summary of steps
- 404 Error用のSite Moduleを新規作成し、PositionにJoomla! 5のTemplate Cassiopeiaに新設された[error-403]を指定します
- たったこれだけで、オリジナルの404 Errorが表示されるようになります
Procedure
- System > Manage > Site Module
- + New
- Select Module Type: Custom

- カスタムモジュールを選択します
- New Module: Custom

- Title: 404 Error - Page Not Found
- Module tab: ページが表示されない旨のメッセージを入力します
- 画像を挿入しているのですが、WYSIWYGエディターで挿入した場合、相対パス指定となるため、絶対パスに変更しています
- テスト過程で、画像が表示されないことがあったため念を入れて絶対パスとしました
- 画像を挿入しているのですが、WYSIWYGエディターで挿入した場合、相対パス指定となるため、絶対パスに変更しています
- Position: Cassiopeia_Child > Error 403 [error-403]


- 実は、ポジションはCassiopeiaとCassiopeia_ChildのどちらのError 403でも表示してくれるのですが、DefaultテンプレートにCassiopeia_Childを指定しているため、サイト管理上統一性を図るためCassiopeia_ChildのError 403を指定することとしました
- Save & Close
- 適当な存在しないURLを指定して、動作を確認します

403 Error Setting Procedure
Trouble
- [Forbidden]の403 Errorについても、上記404 Errorと同じ手順を踏むのですが、404 Error Setting Procedureで設定したオリジナルの404 Errorが表示されてしまい、オリジナルの403 Errorが表示されません
- 試しに参照Bの手順を行うと、オリジナルのエラーは表示されるのですが、同様にどうしても404エラーになってしまいます
- SELinux: Enfocingが影響しているかとも思いましたが、Permissiveに変更しても結果は同様でした
- Apacheのhttpd.confに403エラー表示にerror.phpを指定すると、オリジナルのエラーが表示されるのですが、中身はPosition: error-404を指定した404エラーになってしまいます
- 色々と試行錯誤しながら辿り着いたのは、次の方法でした(つまり原因追及を見送った暫定策です)
- 上記のerror.phpが404エラーと吐き出したerror.htmlをコピーします
- コピーしたhtmlのmain要素内をPosition: error-403を指定した403エラー用のSite Moduleの内容に書き換えます
- 当該htmlをリネームし、httpd.confにて指定します
- ただし、この方法のデメリットとしてメニュー構成を変更した場合、403エラー用のhtmlを再作成しなければなりません
Procedure
- System > Manage > Site Module
- + New
- Select Module Type: Custom

- カスタムモジュールを選択します
- New Module: Custom

- Title: 403 Error - Forbidden
- Module tab:アクセスする権限がない旨のメッセージを入力します
- Position: Cassiopeia_Child > Error 403 [error-403]
- Status: Unpublished
- この作成したSite Moduleは403エラーのコンテンツ管理用に保存するだけです
- そのため、管理上[Unpublished]としました
- Save & Close
- 存在しないURLをブラウザのChromeで指定して、404 Error Setting Procedureで作成したSite Module[404 Error - Page Not Found]により、オリジナルの「希望ではない」404エラーを表示させます
- [F12]を押下してchromeのデベロッパーツールにてコードを確認します
- htmlの全コードをコピーします

- テキストエディタ(わたくしの場合、Pulsarを使用しています)で、上記内容を貼付け、新規に[error_403.html]を作成します

- 作成直後のコンテンツは404エラーです
- 手順5で作成したSite Module: 403 Error - Forbidden のコードをコピーします

- 手順8で作成した[error_403.html]のmain要素内にコピーしたコードに差し替え、上書保存します

- [error_403.html]をFTPクライアントにてアップロードします
- ターミナルにてドキュメントルートへ移動し、適宜所有者:所有グループとSELinuxコンテキストを修正します
- ターミナルにてhttpd.confを編集し、エラー403のドキュメントに[error_403.html]を指定し、httpdを再起動します
# httpd.confを編集 $ sudo nano /etc/httpd/conf/httpd.conf # httpd.confの最下行に追加 ErrorDocument 403 /error_403.html # サービスhttpdを再起動 $ sudo systemctl restart httpd - アクセス制限を掛けた[test]ディレクトリ事前に用意します
- 上記URLを指定して、動作を確認します
