使用htaccess检查另一个目录中的文件

时间:2011-07-11 07:59:39

标签: php .htaccess file-exists

好的,我开始怀疑这是否可能。我一直在倾向于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(),

2 个答案:

答案 0 :(得分: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行中对其进行更新。


  3. 如果您希望可以尝试这种方法,这种方法更灵活(无需指定父文件夹名称),但我无法保证这对您的设置有效(但它可以在我的电脑上运行):

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

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

答案 1 :(得分:0)

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

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