编程语言
首页 > 编程语言> > php – Laravel公共目录列表重定向循环错误 – 需要优雅地失败

php – Laravel公共目录列表重定向循环错误 – 需要优雅地失败

作者:互联网

我正在使用Laravel并在我的公共目录中有一个上传文件的文件夹,名为uploads.

我想确保没有人可以意外导航到该目录的根目录,所以我添加了一条路由如下:

Route::get('uploads', function(){
    return Redirect::to('/');
});

这不起作用,因为我在浏览器中遇到重定向循环错误.我把它缩小到目录存在的事实 – 如果我删除/重命名目录,路由按预期工作.

这让我觉得有更好的办法来解决这个问题.我该如何解决这个问题?

解决方法:

显然,重定向循环似乎来自斜杠重定向,在Laravel默认.htaccess文件中定义.删除以下行:

RewriteRule ^(.*)/$$1 [L,R=301]

将修复驻留在公用文件夹中的文件夹上的重定向循环问题.
然而,这会让你退后一步,因为现在你没有尾随斜杠重定向.
如果不是现有目录,那么你可以做的是重定向尾部斜杠,如下所示:

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>

标签:php,laravel,laravel-routing
来源: https://codeday.me/bug/20190715/1466979.html