直接表示させないテンプレートを指定する

静的なHTMLと同じようにテーマが組めるa-blog cms の仕様から、普通に組むと「同じ表示のページが複数存在してしまう」問題点が出てきます。

例えば、サイトトップのテンプレートを「top.html」にすることは多いかと思います。もちろん、「https://example.com/」でこのテンプレートが動的に表示されるのですが、前述の「静的なHTMLと同じようにテーマが組めるa-blog cms の仕様」から「https://example.com/top.html」でも同じコンテンツが表示されます。

対応策としては、top.html にアクセスがあった場合、301リダイレクトをして正規化する事が考えられますが、a-blog cmsの機能で404を表示させることも可能です。

直接表示させないテンプレートのファイル名のルールを作る

方法は、テンプレートのファイル名やディレクトリ名の命名規則で直接表示させないようにする事ができます。

例: top.html を直接表示させない

まず設定を行います。「private/config.system.yaml」に次の記述を追加します。

forbid_direct_access_tpl  : /^_/

この設定は、直接表示させないテンプレートのファイル名を正規表現で指定する事ができます。今回の例では、先頭にアンダーバーがつく、ファイル・ディレクトリ以下が対象になります。

次に「top.html」を「_top.html」にリネームします。ただこれだとトップページが404になってしまうので、「管理ページ > コンフィグ > テーマ設定」でトップページのテンプレートを「top.html」から「_top.html」に変更します。

これで完了です。「https://example.com/top.html」「https://example.com/_top.html」とも 404 になる事が確認できると思います。

インクルードファイルの対応

直接表示させたくないファイルとして、インクルード専用のファイルも当てはまるかと思います。ただ別の機能として「html」「body」タグがないテンプレートはデフォルトで直接URLを指定して表示されないようになっていますので、特に対応は必要ありません。

例: https://example.com/include/header.html

404になる事が確認できると思います。