質問: ### 前提・実現したいこと laravelのドキュメントルートの設定を、http://〇〇/public/から、http://〇〇/のように、publicを外したいです。 ### 試したこと apacheフォルダ内のconfファルダに配置されている、「httpd.conf」に以下の部分を追加しました。 ``` Alias / "/xampp/htdocs/laravelapp/public/" Options Indexes FollowSymLinks MultiViews AllowOverride all Order allow,Deny Allow from all ``` ### 補足情報(FW/ツールのバージョンなど) laravelのバージョンは5.8です OSはwindowsです。 上記コードの部分を追加したのですが、全く効果がなく、http://localhost/laravelapp/public/〇〇 としなければアクセスできない状態です。 上記問題を解決する為、どなたかアドバイス頂ければ幸いです。 追記です apacheを再起動し、localhostにアクセスしたら404 not foundとなってしまいました。 さらに、localhost/(ファイル名)とすると、internal server errorが発生してしまいます。 以下は、http://localhost/とし、アクセスした際のアクセスログになります。 「::1 - - [21/May/2019:10:12:17 +0900] "GET / HTTP/1.1" 404 1568 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36"」 以下は、httpd.confファイルに「DocumentRoot "C:/xampp/htdocs/laravelapp/public"」と追記し、http://localhost/とした際のアクセスログになります。 「::1 - - [21/May/2019:11:01:28 +0900] "GET / HTTP/1.1" 404 1568 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36"」 しかし、http://localhost/helloとしましたら、helloファイルと対応づけられているコントローラが呼び出され、ビューページを表示することができました。 helloファイルにアクセスした際のアクセスログが以下になります。 「::1 - - [21/May/2019:11:01:13 +0900] "GET /hello HTTP/1.1" 200 1389 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36"」
回答: 私はLaravel方面は疎いので、Apacheの設定方面のみ言及します。 XAMPPのApache上での構築と見受けられるので、 まずはapacheがmod_rewriteに絡む設定をどう処理しているかを ログを追って確認できるように設定を変えます。 Apache 2.4 系で mod_rewrite のログを出力させるには にあるように、C:\xampp\apache\httpd.conf にLogLevelを > > LogLevel info rewrite:trace8 > > > として保存し、apache再起動。 その後、http://localhost/ にアクセスして、 C:\xampp\apache\logs\access_log を点検。 / へのアクセスがどう読み替えられてリダイレクトされているかを調べます。 それを質問文中に追記してもらえれば、的を射る回答が寄せられる可能性が高まります。 ログで追えるようになったら、 httpd.conf で DocumentRoot に指定されているパスに もしも .htaccess があってその中でmod_rewriteを使っているようなら、 それが作用してさらにリダイレクトがかかっていく様がわかるようになるはずです。 あちこちの解説ブログ記事とか読みつつも mod_rewrite - Apache HTTP Server Version 2.4 結局このドキュメントをしっかり読むところから始まる(っていうか答えがここにある)と思います。 / でアクセスしました、 おそらく index.htmlとかindex.phpといったファイルを探しました、 でも見つからないので、 404 Not Foundを返しました、 ってところだと見受けました。 ここで念の為確認ですが、 そのテスト環境をLaravel専用にして / が laravelapp/public/ を参照するようにするなら、 mtsさんのいう、httpd.conf で DocumentRoot の記述を変えるのが手っ取り早いです。 mtsさんの回答にある、 > > DocumentRoot "C:/xampp/htdocs/laravelapp/public" > > > ですね。 もしくは、シンボリックリンクってわかりますか、 ファイルの実体が"C:\xampp\htdocs\laravelapp\public\index.php"にあるのに あたかも"C:\xampp\htdocs\index.php"にあるように扱える方法です。 フォルダの実体が"C:\xampp\htdocs\laravelapp\public\"にあるのに あたかも"C:\xampp\htdocs\"にあるように扱える方法もできます。 例えば シンボリックリンクの作成と削除 (Windows Tips) Windowsのシンボリックリンクとジャンクションとハードリンクの違い:Tech TIPS - @IT など、「windows10 シンボリックリンク」で検索すれば手がかりになる情報が見つかりますが、 わからなければDocumentRootを書き換える作戦の方が簡単です。 上記の対策でaccess_logにどう現れるか、もう一度追記お願いします。