0

I have a folder with images in it at example.com/img/, and at the same time I have a route

get('img/{path}', 'ImageController@output');

But when I try going to example.com/img/someimagepath and if image name is someimagepath I get that image instead of firing route above.

Is there a way to make it fire route instead of requesting a file?

To be precise, I'm using https://github.com/thephpleague/glide Glide library

4

1 回答 1

4

这是因为服务器正在查看public文件夹,找到img目录,并从那里提供图像而不是加载public/index.php。如果index.php未加载,则 laravel 未加载,因此路由将不起作用。

重命名公共目录中的文件夹,或重命名路由。你不能让它们都引用img

我会保持目录不变,并重命名您的路线:

get('images/{path}', 'ImageController@output');

或者如果您真的喜欢img作为一个细分市场,也可以为您的路线添加前缀:

get('app/img/{path}', 'ImageController@output');

基本上,您的路线不能遵循public. 服务器知道加载 laravel 的方式是,如果它找不到public与 URI 匹配的目录或文件,它会加载index.php. 如果它确实找到了与 URI 匹配的目录或文件路径,它将代替它提供服务。

public\.htaccess. 基本上说如果请求与文件或目录不匹配,则加载 index.php

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
于 2015-11-24T16:12:58.370 回答