路由到公共图像文件夹未触发

时间:2016-05-03 00:22:56

标签: laravel routes

我在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>

2 个答案:

答案 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指令。这告诉了网络服务器:

  1. 如果请求是现存文件,请将其打开。
  2. 如果请求是现存目录,请将其编入索引。
  3. 否则,将目录作为参数传递给/index.php。
  4. 所以,在第一遍,“那个文件存在吗?”,它说“是”并绕过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']);

});

您想要实现的目标=阻止部分或全部人员访问文件 答案的作用=阻止文件公开,除非您使用方法提供主题 我希望一切都很清楚