web-dev-qa-db-ja.com

Laravelで静的フォルダにルーティングする方法

Laravelサイトの/ publicフォルダーに配置したフォルダーがあります。パスは次のとおりです。

/public/test

"test"フォルダーにはindex.htmlというファイルがあります。これは、パブリックフォルダーから読み込む静的なリソースにすぎません(フレームワーク内でこのビューを作成したくありません。説明しすぎです)。

このようなルートを作成しました:

Route::get('/test', function() {
  return File::get(public_path() . '/test/index.html');
});

これを機能させることはできません。 Chromeこのページにはリダイレクトループがあるというエラーが表示されます。

この方法でアクセスできます:

http://www.example.com/test/index.html

しかし、どこでも.html拡張子を使用することはできません。ファイルは次のように表示される必要があります。

http://www.example.com/test/

.html拡張子を使用せずにLaravel=パブリックフォルダーから単一のHTMLページを提供するにはどうすればよいですか?

23
ChiCgi

以前はこの問題に直面していましたが、汚い小さなトリックとして、テストフォルダの名前を別の名前に変更してから更新することができます

return File::get(public_path() . '/to new folder name/index.html');

キーは、ルートURLとパブリックのフォルダーとの競合ではありません

22
terry low

静的ファイルの場合、Laravelを通じてそれを提供するリソースを無駄にしていると思います。

過去にpublic内のファイル/フォルダーにアクセスしようとすると無限リダイレクトを作成するバグがいくつかありましたが、Laravelに付属する最新の.htaccessはこれらを解決しました(少なくともApacheでは)このように見えます

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

「リクエストが既存のフォルダに対するものではない場合、末尾のスラッシュがあれば削除します。要求が既存のフォルダーまたは既存のファイルに対するものではない場合、Laravelのindex.phpをロードします

次に、サブディレクトリ内に.htaccessファイルを追加して、ディレクトリの要求時にデフォルトでindex.htmlがロードされるようにDirectoryIndexが設定されるようにしました。

4
Dallin

使用する:

return Redirect::to('/test/index');

ルートファイルの関数またはコントローラー内のいずれか。

2
danb4r