Список общедоступных каталогов Laravel Ошибка цикла перенаправления - необходимо изящно завершить работу

Я использую Laravel и имею папку с загруженными файлами в моем общедоступном каталоге с именем uploads.

Я хочу убедиться, что никто не сможет случайно перейти в корень этого каталога, поэтому я добавил следующий маршрут:

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

Это не работает, так как я получаю ошибку цикла перенаправления в своих браузерах. Я сузил это до факта, что каталог существует - если я удалю/переименую каталог, маршрут будет работать, как и ожидалось.

Это заставляет меня думать, что есть лучший способ справиться с этим. Как решить эту проблему?


person TH1981    schedule 13.08.2014    source источник
comment
Никто не может получить доступ к этому каталогу, и вам не нужно объявлять для него маршрут.   -  person The Alpha    schedule 14.08.2014
comment
@ WereWolf-TheAlpha, это здорово, но как мне справиться с циклом перенаправления? Мне, по крайней мере, это нужно, чтобы потерпеть неудачу немного изящнее...   -  person TH1981    schedule 14.08.2014


Ответы (2)


По-видимому, цикл перенаправления возникает из-за перенаправления косой черты в конце, определенного в файле .htaccess Laravel по умолчанию. Удаление следующей строки:

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

устранит проблему с циклом перенаправления для папок, находящихся в общей папке.
Однако это возвращает вас на один шаг назад, поскольку теперь у вас нет перенаправления завершающей косой черты.

Вместо этого вы можете перенаправлять завершающие косые черты. только если это не существующий каталог, например:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ $1 [L,R=301]

Второе, что вы, вероятно, захотите сделать, это удалить то же условие из последнего блока файла .htaccess Laravel по умолчанию:

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>
person ruuter    schedule 11.09.2014
comment
Это имеет смысл. Я дам ему водоворот позже и дам вам знать, если это сработало. Спасибо! - person TH1981; 13.09.2014

Вы правы, предполагая, что этот каталог может быть доступен. Если вы проверили, а это не так, вы можете выполнить этот шаг на тот случай, если вы решите переключиться на хост, у которого он не скрыт по умолчанию.

Просто добавьте это в свой .htaccess

    Options -Indexes
person Brett T    schedule 14.08.2014
comment
я уже добавил файл .htaccess. проблема сейчас с Laravel и циклом перенаправления. (см комментарии к вопросу) - person TH1981; 14.08.2014