テーマの継承により送信できないフォームが表示される可能性

この記事は公開日より10年以上経過しているため、現在の内容と異なる可能性があります。

先日、a-blog cms のサイト上で http://www.a-blogcms.jp/production/contact/ という間違ったリンクされているところがありました。想定されていないページなので Not Found になるべきところなのですが、今回のケースでは表示されており、メールが送信できない状態でした。

よくありそうなケースですので、対策等を考えてみたいと思います。

状態

まずはテーマです。http://www.a-blogcms.jp/ のテーマが ablogcms とすると、contact が /themes/ablogcms/contact のように用意されます。 production 子ブログがあり、このテーマは親ブログのテーマを継承し production@ablogcms のようになります。

テーマの継承機能を利用すると、継承後のテーマに無いものは継承元のものを利用する事になります。ですので、 /themes/production@ablogcms/ に contact が無かったとしても、テーマが継承されている事からリクエストがあれば表示される事になります。

次に、フォームを送信する際に必要なフォームIDの設定です。親ブログ上にフォームIDが設定されておりますが、子ブログ production 側には設定がありません。ですから、このフォームではメールの送信先や送信メールのフォーマットが無い事になり、メールの送信が完了できません。

対策

フォームIDをグローバル化する機能を用意する事も考えられますが、本来想定しているところでないところで表示している事なので、リダイレクトする方がいいだろうと考えます。

https://www.a-blogcms.jp/contact/ で表示させるべきページなのですから、それ以外のURLで出てしまった時にはリダイレクトするという事を設定します。 head タグ内に、以下のような記述を追記して対応する事にしました。

<!-- BEGIN_MODULE Form -->
<!-- BEGIN step -->
<!-- BEGIN_IF [%{INHERLINK}/neq/https://www.a-blogcms.jp/contact/] -->
<meta http-equiv="refresh" content="0;URL=https://www.a-blogcms.jp/contact/">
<!-- END_IF -->
<!-- END step -->
<!-- END_MODULE Form -->

この設定をしておく事で、SSL を利用しない http:// でアクセスがあった時に、https:// に変更するような事も可能になります。

同じタグ付けがされている記事