好的,我开始怀疑这是否可能。我一直在倾向于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(),
答案 0 :(得分:1)
使用此规则:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}/mydir/img/Cache/$1.jpg -f
RewriteRule ^(.*)\.jpg$ display.php?file=$1 [L]
这需要放入/mydir/img
文件夹中的.htaccess文件
如果您将此文件夹移到其他位置或重命名父文件夹,则还需要在RewriteCond
行中对其进行更新。
如果您希望可以尝试这种方法,这种方法更灵活(无需指定父文件夹名称),但我无法保证这对您的设置有效(但它可以在我的电脑上运行):
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图像