LaravelとXAMPPでルート以外にアクセスしようとするとサーバーエラーになった

現在ローカル開発環境でPHP, Laravelを利用してwebアプリケーションの開発をしています。

始めはPHP内蔵のビルトインサーバーを使っていたのですが、

いずれ公開することを考えて本番と同じサーバー環境で開発を、と思い

XAMPPを利用しようとした際に問題が起こりました。

XAMPP、ApacheでのLaravelのルートの設定でつまづいた事とその解決までの記録です。

まずXAMPPのApacheの設定では

ドキュメントルート(公開される、サーバー上の最上位ディレクトリ)が

以下のように設定されています。

(C:/xampp/apache/conf/httpd.confの247行目から)

DocumentRoot "C:/xampp/htdocs"

このままだとLaravelで扱うwebページのルートは

デフォルトではpublic というディレクトリになるのでアクセスする際には

ドキュメントルート(htdocs)の、Laravelのディレクトリの、publicに

アクセスしなければならず、つまり

http://localhost/(作成したlaravelのフォルダ名)/public/

でアクセスしないといけません。

トップページがこのような長いURLだと不親切ですので変更します。

変更するためにはApacheのドキュメントルートを

publicディレクトリに書き換えてやる必要があります。

その方法ですが、httpd.confの最後に以下の分を追加します。

Alias / "/xampp/htdocs/laravelapp/public/"

<Directory "/xampp/htdocs/laravelapp/public/">
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
Allow from all
</Directory>

順に説明すると、

Aliasというのは、terminal等で利用されてる方はほぼお分かりだと思いますが

「別名を付ける」という事です。以下のように書きます。

Alias リクエストのURLパス 実際のディレクトリ

実際に書き足した文で説明すると、

URLに/(ルート)を入力したら、/xampp/htdocs/laravelapp/public/に

アクセスするよ、ということになります。

(/xampp/htdocs/laravelapp/public/ に /という別名を付けたわけですね)

つまりこれで

http://localhost/と入力すれば Laravel のトップページを

表示してくれるようになりました。

http://localhost で入力しても同じように表示してくれます。        この/(スラッシュ)をつけるかどうかの話は今関係ないので省きますが知らない人は↓のリンクを見ると良いでしょう!                  (URLの終りに「/」(スラッシュ)は必要?、不要?)
それからDirectoryというタグで囲まれた部分
<Directory “/xampp/htdocs/laravelapp/public/”>
  …..
</Directory>
は、この設定したディレクトリに対して使用可能な機能を設定・制限するものです
ここも今回の問題には関係ないので無視します。

ちなみに、上の設定は「最後に追加する」と言いましたが、

httpd.confは後に書かれたものが有効になるのでhttpd.confに

内容を書き足したり上書きするときには最後に書くのが見やすく、

保守性も高いからという理由になります。

話が少しそれましたが、Aliasの設定で

http://localhost にアクセスすればLaravelのトップページが

表示されるようになりました。

そして別のページに遷移しようとした時に問題が生じました。

Route::get('my', 'MyController@index')

のようにルートを設定しているので、

http://localhost/myで指定したページが表示されるはずなのですが、

Server Errorとなりました。

サーバーの設定がおかしいのかと思い見直したり

エラーログを見ても全く解決方法のl見当が付きませんでした。

ググって調べてみたところ、

どうやら同じような現象に陥っていた人がいたようで、

https://stackoverflow.com/questions/16885467/laravel-sends-the-server-on-10-redirects

ここを見ると解決できました。

解決方法はpublic/.htaccessに以下の文を書き加えるだけ。

RewriteBase /

※一応細かく書くと、RewriteEngine Onの次の行に書きました。

.htaccessの内容に関しては

https://html-coding.co.jp/knowhow/tips/wp_modrewrite/

http://ysklog.net/mod-rewrite/rewrite-base.html

http://blog.livedoor.jp/tora0092-tech/archives/13978420.html

このあたりが参考になりました。

あんまり分かったような感じがしませんが、

どうやらAliasを設定した場合、リクエスト時と

パスが合わずリダイレクトのループにはまるようですね…。

近いうちにApacheの深い勉強が必要そうです…!

シェアする

  • このエントリーをはてなブックマークに追加

フォローする