首页 > 解决方案 > htaccess - 检查文件是否存在,否则运行 php

问题描述

背景: 我最近在 PHP 中创建了一个动态图像大小调整脚本,这样我就可以在服务器中的某个位置给它一个图像路径 + 获取宽度参数,它会返回这个图像,根据查询参数调整大小并抛出图像放入缓存文件夹以供将来使用。

之后,如果请求具有相同宽度的相同图像,它会转到该 PHP 脚本,该脚本会检查文件是否已经存在,如果存在,它将直接输出。(它会做file_get_contents(),然后用适当的标题回显它)

挑战: 如果文件已经存在,我想做的是绕过 PHP 脚本。我想.htaccess检查文件是否存在于缓存文件夹中,然后只需转到该文件,而不是 PHP 脚本。这很简单,除了文件名包含修改后的宽度。

因此,例如:

如果文件相对路径是images/products/36sh542dhs.jpg,并且我希望将其修改为 100px 宽度,则请求 URL 将如下所示si/images/products/36sh542dhs.jpg?d=100。该文件将按如下方式存储:resized_images/cache/images/products/36sh542dhs---D100.jpg.

是否有任何可以想象的方式来获取.htaccesssi/images/products/36sh542dhs.jpg?d=100分解,删除si,添加resized_images/cache,并修改文件名以D---100在“点扩展名”部分之前粘贴?

标签: .htaccessurl-rewriting

解决方案


关于您的问题,我想到的最佳算法是:始终使用/resized_images/cache/images/products/36sh542dhs---D100.jpg路径。

.htaccess你可以有一条线ErrorDocument 404 /404-error-handler.php。这将捕获所有 404 错误。

404-error-handler.php文件中检查 $_SERVER['REQUEST_URI'] 的值。如果它包含您的路径,则包含图像生成和保存的逻辑,否则您将返回自定义 404 错误页面。

这样,您将获得您所要求的内容: htaccess 检查文件是否存在,如果不存在,则执行 404 自定义 php 脚本,该脚本将检查 URL 是否与您的 image-generation-url 匹配并生成并缓存图像,或者显示404 页面。如果文件存在,它将提供给客户端。


推荐阅读