II使用Laravel并在我的公共目录中有一个名为uploads
的上传文件的文件夹。
我想确保没有人可以意外导航到该目录的根目录,所以我添加了一条路线如下:
Route::get('uploads', function(){
return Redirect::to('/');
});
由于我在浏览器中遇到重定向循环错误,因此无法正常工作。我把它缩小到目录存在的事实 - 如果我删除/重命名目录,路由按预期工作。
这让我觉得有更好的办法来解决这个问题。我该如何解决这个问题?
答案 0 :(得分:12)
显然,重定向循环似乎来自尾部斜杠重定向,在Laravel默认.htaccess文件中定义。删除以下行:
RewriteRule ^(.*)/$ $1 [L,R=301]
将修复驻留在公用文件夹中的文件夹上的重定向循环问题
然而,这会让你退后一步,因为现在你没有尾部斜线重定向。
Insted你可以做的只是重定向尾随斜杠如果不是现有目录,就像这样:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ $1 [L,R=301]
您可能要做的第二件事是从Laravel默认.htaccess文件的最后一个块中删除相同的条件:
RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]
这个块说:“将所有内容重定向到index.php文件,现有文件和文件夹除外。”我注释掉了目录条件,因为我不希望人们在我的公共文件夹中访问文件夹索引。如果你这样做,请取消注释。
这是我完整的.htaccess文件:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
RewriteBase /
# Redirect trailing slashes
# Only if not existing directory. This prevents redirect loop.
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ $1 [L,R=301]
# Redirect everything to index.php if not existing file like css or jpg
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
答案 1 :(得分:0)
您认为可以访问此目录是正确的。如果您已经检查过但不是,则可能需要按照此步骤操作,以防您决定切换到默认情况下未隐藏它的主机。
只需将此添加到.htaccess
即可 Options -Indexes