WordPressとmailformproを併用するときの注意

WordPressでお問合せフォームを作成する際、Contact Form7のプラグインを利用するのが一般的だと思うけど、確認画面が必要だったりデータをCSVで吐き出したかったりすると機能的に物足りない。(ContactForm DBをはじめとしたその他のプラグインを活用する手はあるけれども)


そんな時に便利なのが、フリーのフォームCGIのmailformpro。特に、簡易的な料金計算機能が便利で、帯に短し襷に長し的なシーンで重宝したりする。


今回、WordPressで構築したサイトにmailformproを設置した際、ちょっとはまったのでメモを残しておく。

経緯

  • 既存サイト(非WordPress)のサブディレクトリ(/form)にmailformproを設置した
  • 既存サイトのリニューアルを行うため、サブディレクトリ(/wordpress)にWordPressをインストールした

    ※サブディレクトリにはベーシック認証を設定し、リニューアル作業を進行
  • リニューアル作業が終了、サブディレクトリにインストールしたWordPressを、親ディレクトリで表示されるように設定した
  • mailformproが動かなくなった。具体的には、送信ボタンをクリックすると403エラーが表示されるようになった
  • mailformroを設置したサブディレクトリ(/form)に、.htaccessをアップすることで正常に動作するようになった


ちなみに、ディレクトリの構成はこんな感じです。WordPressを親ディレクトリで表示されるように設定した際、.htaccess(下記A)も同じドメインにコピーしています。


www
.htaccess(...A)
└ /wordpress
└ /form
 └ .htaccess(...B)
 └ /formA
 └ /formB

原因と対策

  • WordPressをインストールしたらおかしくなった
  • 403エラーはアクセス権がない場合のエラー
とのことから、WordPress.htaccess(上記のA)が悪さをしてるんじゃないかと推測した。書くと簡単だけど、素人がここまで辿り着くまでには結構ググった。


そして、「wordpress サブディレクトリ htaccess cgi」というキーワードでググって辿り着いたのがこちらのページ。


WordPressの生成する.htaccessが既存のCGIに影響してしまった!
自分が直面している事象とかなり近い!自分の環境の場合、wwwディレクトリ以下であれば特に.htaccessを置かなくてもCGIは動くけど、上記ページを参考に以下の.htaccess(上記のB)を/formディレクトリに設置した。

Options ExecCGI
AddType text/html cgi
AddHandler cgi-script cgi

RewriteEngine Off

無事動くようになりました。


ちなみに、AとB、2つの.htaccessが存在することになりますが、二つの内容が矛盾する場合、サブディレクトリに設置された.htaccessの内容が優先されるようです。こんなことも調べているうちにわかりました。

まとめ

WordPressで構築したサイトにmailformproを設置した際に403エラーが出てしまったら...mailformproのサポートサイトにも書かれていなかったので、同じような事象で困っている人のお役に立てれば。