質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

2回答

5515閲覧

laravelでpublicを任意の場所に変更する

huhehaote

総合スコア6

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

1クリップ

投稿2016/07/08 01:04

ルートディレクトリではなく、その下の階層にpublicを変えて配置しましたが、routeがうまいこと動いてくれません。 実体のフォルダ階層は下記のようなイメージです

public_html( http://homestead.app/
├ laravel(laravelのシステムデータをここに入れています。)
└ system(ここにアクセスされるindex.phpを配置)

実際、アクセスする時は「http://homestead.app/system/」にアクセスされます。
http://homestead.app/」には他のコンテンツが入ってて、laravelの設置が出来ません・・・。

routeで Route::get("admin",function(){}) と記述すると、「http://homestead.app/system/admin」ではアクセスできます。
ここまでは良いのですが、「http://homestead.app/system/admin/」とアクセスすると、「http://homestead.app/admin/」に自動的にリダイレクトされてしまいます。

http://homestead.app/system/admin」
http://homestead.app/system/admin/」
http://homestead.app/system/admin/index」
でもリダイレクトせずに同じアクションをさせようとするにはどうすれば良いでしょうか?

ちなみに、laravelのバージョンは5.2です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

htaccessを下記に変更することで、解決

htaccess

1<IfModule mod_rewrite.c> 2 <IfModule mod_negotiation.c> 3 Options -MultiViews 4 </IfModule> 5 6 RewriteEngine On 7 8 # Redirect Trailing Slashes If Not A Folder... 9 RewriteCond %{REQUEST_FILENAME} !-d 10 11 ## 追加 12 RewriteBase /members 13 ## 追加 14 RewriteRule ^(.*)/$ $1 [L,R=301] 15 ## コメントアウト 16 # RewriteRule ^(.*)/$ /$1 [L,R=301] 17 18 # Handle Front Controller... 19 RewriteCond %{REQUEST_FILENAME} !-d 20 RewriteCond %{REQUEST_FILENAME} !-f 21 22 RewriteRule ^ index.php [L] 23 24 # Handle Authorization Header 25 RewriteCond %{HTTP:Authorization} . 26 RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 27</IfModule> 28

投稿2016/07/08 07:47

huhehaote

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

アクセスはできているようなので、念のため確認させてください。

public/index.php

require __DIR__.'/../bootstrap/autoload.php'; $app = require_once __DIR__.'/../bootstrap/app.php';

は正しく修正されましたか?
また、

public/index.php

$app->bind('path.public', function() { return __DIR__; });

のように、public_path()の返すパスを設定しなおしましたか?

【追記】
試しに自分の環境でpublicをlaravelプロジェクトの外部に置き、homesteadで起動してみましたがリダイレクトは起きませんでした。

参考までに載せます。

Homestead.yaml(一部)

yaml

1folders: 2 - map: /Users/romiogaku/lessons/laravel 3 to: /home/vagrant/laravel 4 5sites: 6 - map: teratail.dev 7 to: /home/vagrant/laravel/system

routes.php

Route::get("system/admin", ['as' => 'admin_index', function () { return view("admin.index.index"); }]);

views/admin/index/index.blade.php

<!DOCTYPE html> <html> <head> <title>Laravel</title> </head> <body> test </body> </html>

system/index.php

<?php require __DIR__.'/../teratail/bootstrap/autoload.php'; $app = require_once __DIR__.'/../teratail/bootstrap/app.php'; $kernel = $app->make(Illuminate\Contracts\Http\Kernel::class); $response = $kernel->handle( $request = Illuminate\Http\Request::capture() ); $app->bind('path.public', function() { return __DIR__; }); $response->send(); $kernel->terminate($request, $response);

投稿2016/07/08 01:58

編集2016/07/08 07:31
romiogaku

総合スコア546

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

huhehaote

2016/07/08 02:16

ご回答ありがとうございます。 上部の、bootstrap/autoload.phpとbootstrap/app.phpのパス設定は、変更済みです。 また、下部のbindを設定する箇所は、laravel 5.2では見当たらなかったです。 ENVのAPP_URLにも「APP_URL=http://homestead.app/system」と入れてあります・・・。
romiogaku

2016/07/08 03:17

Route::get("system/admin",function(){}); とするのはダメですか?
huhehaote

2016/07/08 03:31

動けば良いのですが・・・。それだと、「NotFoundHttpException」が出てしまいますね・・・。
romiogaku

2016/07/08 03:43

であればroutes.phpの追記をお願いします。
huhehaote

2016/07/08 03:48

こんな感じで記述しました。 Route::get("admin",['as' => 'admin_index',function(){ return view("admin.index.index"); }]); Route::get("system/admin",['as' => 'admin_index',function(){ return view("admin.index.index"); }]); こうすると、下記URLでアクセス可能です。 http://homestead.app/system/admin http://homestead.app/system/system/adminhttp://homestead.app/system/system/admin/」でアクセスするとhttp://homestead.app/system/admin」にリダイレクトしてしまいます・・・。
huhehaote

2016/07/08 09:02 編集

そこまでしていただいて・・・。ありがとうございます! htaccessを変更すれば行けました! こんな感じに変更しました。 <IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews </IfModule> RewriteEngine On # Redirect Trailing Slashes If Not A Folder... RewriteCond %{REQUEST_FILENAME} !-d ## 追加 RewriteBase /system ## 追加 RewriteRule ^(.*)/$ $1 [L,R=301] ## コメントアウト # RewriteRule ^(.*)/$ /$1 [L,R=301] # Handle Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] # Handle Authorization Header RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] </IfModule>
romiogaku

2016/07/08 08:07

なるほど。 homestead(nginx)じゃなくてapacheだったんですね。
huhehaote

2016/07/08 08:31

あ、、、すみません。 実際のテストは、scotchboxでやっておりました。 わかりにくいと思ったので、homesteadのドメインとして記述しておりましたが・・・。
huhehaote

2016/07/08 09:02

これでも行けました。 RewriteRule ^(.*)/$ /$1 [L,R=301] ↓↓↓↓↓ RewriteRule ^(.*)/$ /system/$1 [L,R=301]
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問