1

好的,我开始怀疑这是否可能。我一直在倾注 htaccess 教程和示例,但我似乎无法让它正常工作。

我有一个脚本,可以创建在朋友网站上的目录中运行的动态图像。我可以访问 /,但我使用的实际目录在 /mydir/ 中。为了显示图像,它们通过 PHP 输出到 png。我有以下RewriteRule设置来获取请求的文件名并运行 PHP 脚本。每个文件名代表一个单独的文件,其中包含 display.php 脚本中使用的序列化对象

RewriteRule ^(.*)\.jpg$ display.php?file=$1

这部分工作正常,但是如果有人请求一个不存在的文件,它只会抛出 PHP 错误,因为脚本被调用但没有对象可供使用。

我现在想要做的并且完全失败的是让它检查文件是否存在于 ./Cache/ 目录中,然后像往常一样运行脚本,如果不存在,那么服务器可以抛出一个标准的 404。

我尝试过类似的事情

RewriteCond %{REQUEST_URI} ^(.*)\.jpg$
RewriteCond %{DOCUMENT ROOT}/img/Cache/%1.jpg -f

以及 REQUEST_URI、REQUEST_URL、SCRIPT_FILENAME、SCRIPT_NAME 等的其他组合。我似乎无法想出正确的变量和正则表达式来处理这个问题,所以我向你们寻求帮助。最大的问题是不知道每个变量中的实际情况,所以我可以看到哪里出错了。我会为了某种 var_dump() 而杀人,

4

2 回答 2

1

使用此规则:

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{DOCUMENT_ROOT}/mydir/img/Cache/$1.jpg -f
RewriteRule ^(.*)\.jpg$ display.php?file=$1 [L]
  1. 这需要放入文件/mydir/img夹中的 .htaccess 文件中

  2. 如果您将此文件夹移动到其他位置或重命名父文件夹,您还需要RewriteCond在线更新它。


如果您希望可以尝试这种更灵活的方法(无需指定父文件夹名称),但我不能保证这将适用于您的设置(但它确实适用于我的 PC):

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} ^(.*)/([^/]+)\.jpg$
RewriteCond %1/Cache/%2.jpg -f
RewriteRule ^(.*)\.jpg display.php?file=$1 [L]

这里当前的物理文件夹是根据请求的 URL 自动确定的。但是如果你有符号链接或其他一些设置,它可能会产生不正确的结果。另外 .. 它还有 1 个 Condition .. 这使它变慢了一点(要检查 1 个额外的正则表达式)。

于 2011-07-11T18:01:18.993 回答
0

我会使用 PHP 文件来检查它:

在您的 PHP 中使用file_exists,如果它不存在,请使用header("HTTP/1.0 404 Not Found");404header('Location图像

于 2011-07-11T08:04:05.280 回答