.htaccess - 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
.
是否有任何可以想象的方式来获取.htaccess
,si/images/products/36sh542dhs.jpg?d=100
分解,删除si
,添加resized_images/cache
,并修改文件名以D---100
在“点扩展名”部分之前粘贴?
解决方案
关于您的问题,我想到的最佳算法是:始终使用/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 页面。如果文件存在,它将提供给客户端。
推荐阅读
- linux - RHEL 中的 openssl - 在不使用 openssl.cnf 的情况下使用 root 签署客户端证书?
- java - 在 Intellij 中导入 Apache poi
- visualforce - 在 Visual force 页面中默认检查 apex:selectOption
- python - 如何按升序对字符串列表(包含数字)进行排序
- twitter-bootstrap - 使用具有不同列数的行时列错位
- javascript - firebase 服务和调试功能?
- javascript - 使用 CSS、JavaScript 或 jQuery 悬停时更改单词?
- javascript - 如何在车把模板中输出它?
- python - 以有效的方式计算数组中的唯一元素
- c# - 删除级联不起作用