我在laravel 5.2中有以下路线
Route::get('images/{filename}', function ($filename)
{
if($filename)
{
return redirect('/home');
}
});
如果有人输入以下网址:www.mydomain.com/images/image_abc123.jpg,我希望将其重定向到www.mydomain.com/home。但路线没有触发,而是显示图像。
有什么建议吗?谢谢!
编辑:这是我的.htaccess / / public目录下的laravel 5.2的默认值
<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]
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>
答案 0 :(得分:1)
这可能是因为您的网络服务器。常见的默认值通常是这样的。
server {
listen 80;
listen [::]:80;
listen 443 ssl;
listen [::]:443 ssl;
server_name cards.foo *.cards.foo;
root /var/www/cards/public;
index index.php;
include php.conf;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
}
注意try_files
指令。这告诉了网络服务器:
所以,在第一遍,“那个文件存在吗?”,它说“是”并绕过PHP 100%。你会想要改变它。
答案 1 :(得分:0)
好吗!公共文件夹被命名为public是有原因的! 为了解决这个问题,你必须将这些图像放在存储文件夹中(这就是你想知道存储文件夹的内容)
Storage/app
因此他们不再存在于公共文件夹中,除非人们无法联系到他们 你这样做
Route::get('images/{filename}', function ($filename)
{
// get the image named $slug from storage and display it
// Something like (not sure)
$image = File::get('images/' . $filename . '.jpg');
return response()->make($image, 200, ['content-type' => 'image/jpg']);
});
您想要实现的目标=阻止部分或全部人员访问文件 答案的作用=阻止文件公开,除非您使用方法提供主题 我希望一切都很清楚