WordPress(2サイト)をVirtualHostで運用し、さらにそのWordpressをオールSSL化しました。
httpからhttpsヘリダイレクトはできましたが、カスタムパーマリンク(/%category%/%postname%/)が利用できず、デフォルトのパーマリンク(?p=123)つまりパラメータクエリでしかどちらのサイトにもアクセスできなくなりました。
カスタムパーマリンクでアクセスすると”404 NOT FOUND”が表示されました。やむなく、(?p=123)という味も素っ気もないURLで運用していました。
WordPressのプラグインPermalink Redirectや.htaccessを試しましたが、すべて効果ありませんでした。もちろん、サーバ(apache)側では、リダイレクトが有効になっています。httpではカスタムパーマリンクでの運用ができていました。
まとめると、「https://www.shigizemi.com/?page_id=37」でのアクセスは表示されますが、「https://www.shigizemi.com/class-fuukei/」では表示されません。「404 NOT FOUND」となります。
さらに、404.phpも表示されず、apacheのデフォルトと思われるこれまたみじめな404ページが表示されるだけでした。
3日ほど、試行錯誤した挙句、やっと解決しました。今回は、さすがのgoogle先生もお答えはありませんでした。(単に、私の検索力不足?)
結論は、バーチャルホスト用のsslのconfファイルにリダイレクト(R=301)の設定と404.phpの設定を追記してapacheを再起動すればちゃんと表示されるようになります。
では、その手順を忘れないうちに記録します。
【前提条件】
- apacheのリダイレクトは有効
- WordPressをバーチャルホストで運用
- WordPressのSSL化完了
- 既存の404.phpがある
バーチャルホストのSSL用confファイルをそれぞれssl_site1.conf、ssl_site2.confとします。
1.ssl用のconfファイルの編集
(1)ssl_site1.conf編集
# vi /etc/httpd/conf.d/ssl_site1.conf
————————————————————————————
##
## SSL Virtual Host Context
##
<VirtualHost *:443>
# General setup for the virtual host, inherited from global configuration
DocumentRoot /usr/xxx/yyyy/site1
ServerName pc.shigizemi.com:443
#ここから追記
#404.php表示
ErrorDocument 404 /index.php?error=404
#リダイレクト設定
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
編集が終わったら、上書き保存。
(2)ssl_site2.conf編集
# vi /etc/httpd/conf.d/ssl_site2.conf
———————————————————————————-
##
## SSL Virtual Host Context
##
<VirtualHost *:443>
# General setup for the virtual host, inherited from global configuration
DocumentRoot /usr/xxx/yyyy/site2
ServerName www.shigizemi.com:443
#ここから追記
#404.php表示
ErrorDocument 404 /index.php?error=404
#リダイレクト設定
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
編集が終わったら、上書き保存。
(3)apache再起動
# service httpd restart
2.動作(表示)確認
(1)パーマリンクの変更
カスタムパーマリンクを設定します。(/%category%/%postname%/)
「変更の保存」ボタンをクリック
(2)カスタムパーマリンクで表示確認
「https://www.shigizemi.com/class-fuukei/」 でアクセスしてみると、ちゃんと表示された!
(3)404.php表示確認
「https://www.shigizemi.com/でたらめ」 でアクセスると404.phpがちゃんと表示された!
無事、httpのころから愛用していたカスタムパーマリンク(/%category%/%postname%/)でアクセスできるようになったので一安心です。
番外:ちょっと不思議なことを発見。
リダイレクトの設定をssl_site1.confに追記して、apacheを再起動してみると、site1だけでなく、site2も普通にカスタムパーマリンクで表示されました。
ssl_site2.confにリダイレクト設定を追記しなくてもいいようですが、念のために設定は追記しています。
詳細なシステムはわかりませんが、おそらく、バーチャルホストが2つあるので、どちらか一つを明示的にリダイレクトすると残りの方はワードプレス側で処理してくれているのかも。site2の.htaccessには、最初に試行錯誤していた時に追記したリダイレクト処理が記載されたままになっているからです。追記したリダイレクト処理は、ssl_site2.confのものと全く同じです。site2には、wordpressが自動で吐き出したリダイレクト設定内容だけがありました。