EC2 + Apache環境でLaravelとWordPressを共存させる

Laravelフレームワークで開発している情報サイトの下に記事ページを作りたいとなったときに新しくCMSを自作していくのは今の時代もったいないかなと思います。他にないCMSを書きたいなら自作する理由もわかりますがAmebaブログやはてなのような機能が欲しいだけならWordpressを使った方が良いです。

よくあるケースだと思うのですがなぜか全然参考になる記事が見つからなかったりあったとしても古い情報しかなかったのでここに手順を書いておきます。

① Publicフォルダにwordpressをインストールする。

wget https://wordpress.org/latest.tar.gz 
tar -xzvf latest.tar.gz
mv wordpress blog

変更後wp-config.phpでデータベースの情報を更新してください。

wordpressという名前のフォルダが作成されるのでblogに変更

②publicフォルダの中にある.htaccessを書き換える。

Laravelのpublicフォルダに.httaccessファイルがあると思いますがその内容を

<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>

RewriteEngine On

# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_URI} !^/blog/wp-admin.*$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]

# Send Requests To Front Controller...
RewriteCond %{REQUEST_URI} !^/blog.*$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>

と書き換えます。

以下のサイトが参考になります。

③wp-config.phpを書き換える

自分はここでつまづきました。httpsで運用しているのでelbとwordpressの間でリダイレクトループに陥り、blog/wp-adminにアクセスすることができませんでした。wp-config.phpに以下のコードを加えます。

define('FORCE_SSL_ADMIN', true);
define( 'FS_METHOD', 'direct' );

if ( ! empty( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' ) {
$_SERVER['HTTPS']='on';
}

以上でlaravelのなかにwordpressを入れることができました。自分はサイトURLとwordpress URLを最初からhttp→httpsとしていたので、上の内容でもエラーが出てしまう方は、以下のいずれかのやり方を参考にしてみてください。

コメントは受け付けていません。