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 cgi」というキーワードでググって辿り着いたのがこちらのページ。
自分が直面している事象とかなり近い!自分の環境の場合、wwwディレクトリ以下であれば特に.htaccessを置かなくてもCGIは動くけど、上記ページを参考に以下の.htaccess(上記のB)を/formディレクトリに設置した。
WordPressの生成する.htaccessが既存のCGIに影響してしまった!
無事動くようになりました。
Options ExecCGI
AddType text/html cgi
AddHandler cgi-script cgi
RewriteEngine Off
ちなみに、AとB、2つの.htaccessが存在することになりますが、二つの内容が矛盾する場合、サブディレクトリに設置された.htaccessの内容が優先されるようです。こんなことも調べているうちにわかりました。