【问题标题】:htaccess: Can't check dynamic file existence!htaccess:无法检查动态文件是否存在!
【发布时间】:2011-09-12 06:01:46
【问题描述】:

我已经通过 htaccess 文件编写了一个即时缩略图创建器,以查看请求的文件是否存在,如果不将用户发送到 php 页面来创建它。我的 htaccess 文件如下所示:

# Check the formatting (this works)
RewriteCond %{SCRIPT_FILENAME}%{QUERY_STRING} /([a-zA-Z0-9-]+).(jpg|gif|png)w=([0-9]+)&h=([0-9]+)(&c=(true|false))

# Only forward to thumbnail.php if file doesn't exist
#RewriteCond %{REQUEST_FILENAME} !-f   #this works but not for the correct filename!
RewriteCond %1-%2-%3-%4-%6.jpg !-f     # Doesn't work!!!

# If file doesn't exist, send here: (this works)
RewriteRule ^.*$ thumbnail.php?file_name=%1&type=%2&w=%3&h=%4&c=%6

我对文件是否存在的检查似乎不起作用...使用%{REQUEST_FILENAME} 的旧版本有效,但这不是我需要检查的正确文件名。我已经验证了新文件%1-%2-%3-%4-%6.jpg有正确的输出,但是没有触发条件!

基于此网址:

this-is-the-image-name.gif?w=200&h=100&c=true

htaccess 文件应该检查​​这个文件是否存在:

this-is-the-image-name-gif-200-100-true.jpg

缩略图和 htaccess 文件都在同一个文件夹中,但这个文件夹是未知的,不能硬编码。是否需要完整路径才能检查?如果是这样,我怎样才能获得完整路径但使用我的自定义文件名?

用这个把我的头发拉出来……帮忙!谢谢。

【问题讨论】:

  • 这是一个很好的 mod-rewrite 问题,我正在添加 mod-rewrite 标签,但你应该尝试在 ServFault 上提问,你会在这个地方找到一些 mod-rewrite 天才。
  • thumbnail.php 文件在哪里?
  • @Creadiff thumbnail.php 文件与要检查的缩略图文件位于同一目录 (media/thumbnails/)。

标签: apache .htaccess mod-rewrite conditional filepath


【解决方案1】:

您可以使用您的 PHP 脚本来替换传统的“404 错误”页面:

ErrorDocument 404 thumbnail.php

然后,您可以使用 PHP 检索请求的 URL:

$url = $_SERVER["REQUEST_URI"];

可以使用preg_match 函数检索参数。

【讨论】:

  • 好吧,它总是会给出 404,因为我正在使用查询字符串来设置大小,所以我请求的文件名不存在。我不确定会有多大的速度差异,但我试图避免存在的图像必须由 php 文件路由......这就是它目前所做的(PHP 文件中的 file_exist)。
  • 你为什么不直接为你的图片命名:this-is-the-image-name-gif-200-100-true.jpg?你不需要任何重写。因此,现有图像将直接由 Apache 发送,只有 PHP 生成的图像会被 PHP 脚本路由(我猜这种情况发生的频率要低得多)。
  • 没错,这就是我最初所做的,但客户更喜欢这种语法。我有一个sister-question going on here,我尝试解决这方面的问题。
猜你喜欢
  • 2021-05-25
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
  • 2011-09-11
  • 2016-02-07
  • 2021-12-28
  • 2017-04-21
  • 1970-01-01
相关资源
最近更新 更多