Webroot子文件夹

时间:2017-03-09 01:32:55

标签: .htaccess cakephp controller routing cakephp-3.0

我上传并保存了图片到/webroot/uploads/xxx/xxx.jpg。

然后我删除了图像文件,但它显示在error.log

  

'错误:[Cake \ Routing \ Exception \ MissingControllerException]控制器   找不到类上传。'

我想我需要修复路由,.htacess或其他。

但我不知道如何解决它。

我的Cakephp版本是3.x.x。

任何人,你能解释一下如何修理它们。

2 个答案:

答案 0 :(得分:2)

@ Manohar的建议很好,而且解释确实是CakePHP将缺少的/uploads请求映射到一个不存在的控制器。但我总是发现理解问题的真正原因有助于解决问题,并避免将来出现类似的问题,所以这里有一些关于为什么这样做的事情。

看看webroot/.htaccess。它应该是这样的:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

这意味着不存在的资源的任何URL(在您的情况下,已删除的图像)将被重写(内部)到index.php,后者又通过控制器和操作处理请求从原始网址确定。由于您的网址以/uploads开头,因此会将其发送给UploadsController

总而言之,处理问题的另一种方法是告诉Cake 而不是尝试处理/uploads网址。只需在RewriteCond %{REQUEST_URI} !^/uploads/之后添加RewriteCond之类的内容即可告诉它不要以/uploads/开头的任何内容运行规则。 (谷歌的mod_rewrite文档了解更多。)

也可以(未经测试)简单地放

<IfModule mod_rewrite.c>
    RewriteEngine Off
</IfModule>
webroot/uploads/.htaccess中的

(可能目前还没有)会照顾它,虽然这可能会影响性能(它是一个需要加载和解析的额外文件)涉及/uploads)的每个请求。

请注意,这些选项会导致为您的网页可能引用的任何已删除图片发回404状态代码,这意味着它们会显示为&#34;缺少图像&#34;图标。 @ Manohar&#34; file_exists&#34; (或任何其他避免在HTML中生成图像标记的程序化解决方案)都不会这样做。哪种结果更可取决于您的情况。

答案 1 :(得分:1)

你已经从那条路径中删除了xxx.jpg图片,但我猜你还是从某处调用那张图片。

  

每当您重新加载任何包含已删除文件的页面时,error.log文件中都会出现此类错误。

因此,在将src(source)提供给任何图像/文件之前,请确保存在:

if (file_exists(/webroot/uploads/xxx/xxx.jpg)):

endif;

或者你可以使用CakePHP file library来处理这种情况。