読者です 読者をやめる 読者になる 読者になる

4年間

東京のスタートアップで働く大学休学2年目の人のブログ

herokuのrailsアプリのサブディレクトリにwordpressのブログを表示させたい:リバースプロキシ

herokuで運用しているサービスのサブディレクトリにブログを開設したくて、ブログはwordpressで運用するときのやり方まとめです。

SEO的な観点から、サブドメインよりサブディレクトリでやった方がいいという噂です。

herokuアプリのurlが http://heroku-hoge.com

wordpressブログのurlが http://wordpress-hoge.com だとして、

http://heroku-hoge.com/blog 以下にアクセスした際に、http://wordpress-hoge.com以下のページが表示されるようにします。「http://heroku-hoge.com/blogにアクセスすると、urlはhttp://heroku-hoge.com/blogのまま、http://wordpress-hoge.comの内容が表示されている」という状況です。

いろいろ調べてそれなりに記事が出てきますが、コピペしてやっても上手く動かなかったので、全体的にこのブログでも上手くいったやり方まとめようと思います。

やり方

①「rack-reverse-proxy」というgemファイルをインストールします

 gemfileに以下を記述し、bundle installします

gem "rack-reverse-proxy", require: "rack/reverse_proxy", git: 'https://github.com/jaswope/rack-reverse-proxy.git'

②先ほどのgemfileを発動させます

 config.ruに以下を記述します。

use Rack::ReverseProxy do
reverse_proxy /^\/blog\/.*)$/, 'http://wordpress-hoge.com$1', opts={:preserve_host => true}
end


以上で、herokuアプリ側の設定は完了です。
続いて、wordpress側の設定に進みます。ここで注意ですが、wordpressはルートディレクトリにインストールしてください。なぜか分かりませんが、サブディレクトリにインストールしたら動きませんでした。

③wp側のwp-config.phpを編集します

 ftpで接続してwp-config.phpに下記を追加してください。

$_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];
$_SERVER['REQUEST_URI'] = '/blog' . $_SERVER['REQUEST_URI'];
$_SERVER['SCRIPT_NAME'] = '/blog' . $_SERVER['SCRIPT_NAME'];
$_SERVER['PHP_SELF'] = '/blog' . $_SERVER['PHP_SELF'];
$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];

define('WP_HOME', "http://http://wordpress-hoge.com/blog");
define('WP_SITEURL', "http://http://wordpress-hoge.com/blog");


以上で完了です。


何やらパーマリンクの設定をいじっているうちに.htaccessのRewriteの部分が勝手に更新され、ルート以外にアクセスしたら500になってしまうようです。初期の.htaccessに戻せば解決します。下記に初期の状態を挙げておきます

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>