我在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页面?
以前曾面临过这个问题,作为一个肮脏的小技巧,你可以将测试文件夹重命名为其他文件,然后更新
return File::get(public_path() . '/to new folder name/index.html');
关键是你的路由url和你在公共中的文件夹之间没有冲突
对于静态文件,我认为通过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文件,以确保设置了DirectoryIndex,以便在默认情况下,在请求目录时加载index.html。
使用:
return Redirect::to('/test/index');
可以在路由文件的函数中,也可以在控制器中。