プログラミングメカブログ

Adults cling to the past, Children want to escape to the future

プログラミングメカブログ

Adults cling to the past, Children want to escape to the future

2月

09

LaravelとWordPressの共存

  • POSTED BY 小谷松 丈樹 IN 調査
  • No Comments

Laravel × WordPress

https___s_w_org_about_images_logos_wordpress-logo-stacked-cmyk_pdf

Laravelをインストールして、同一サーバ内でVHなどを切らずに
WordPressと共存させる事が出来るかを調査しました。

目標

下記の様なディレクトリ構成で、LaravelとWordPressを共存させる。

Laravelがインストールされている状態のドキュメントルートの public の中に、
wordpress というディレクトリを作って、そこにWordPressをインストールして動かしたいワケです。

問題

どうしようもないやつ

もちろんの問題があって、Laravel側に wordpress というパラメータは渡す事はできません。
こればっかりはVH切るなりで対応しないとどうしようもなさそうですね。

基本のリライト設定の確認

そもそもで、Laravelの .htaccess を確認すると、

アクセスしているURLが、ディレクトリでもファイルでもなかった場合、
Laravelのコントローラである index.php にリライトして、ルーティングなどを行います。
wordpress ディレクトリが存在している場合に、 /wordpress にアクセスされると、
リライトせずに /wordpress/ へのアクセスとして処理されます。

最大の問題

実はここで、リライトの穴が存在します。
<FQDN>/wordpress にアクセスをした場合、存在するディレクトリにアクセスしているため、リライトされません。
apacheはディレクトリに対するアクセスと判断し、 /wordpress/ にリダイレクトをさせて、
DirectoryIndexのファイルを探しに行く訳ですが・・・

なんと、最後のURLがスラッシュで終わっていた場合、
.htaccessはスラッシュを消したURLにリダイレクトしています。
よって、apacheが再度最後にスラッシュを付けてリダイレクト、
.htaccessがスラッシュを消してリダイレクト、
以下無限ループ。 で、困っちゃう訳ですね。

解決法

/wordpress/ 以下に対するアクセスはまるっとhtaccessのリライトから除く必要があります。

RewriteCond %{REQUEST_URI} !^/wordpress.*$
で、 /wordpress 以下のアクセスをリライト対象から外しています。
これで共存が出来ますね。

コメントを残す

Please type the characters of this captcha image in the input box

Please type the characters of this captcha image in the input box