Lea*_*rou 6 .htaccess mod-rewrite httpresponse last-modified
我知道我们可以轻松地在任何http 请求标头上建立RewriteCond .但是我们可以检查(某些)将要发送的响应标头吗?特别是最后修改过的一个?
我想只在最后修改日期超过30分钟时重写一个URL,并且我试图避免每次请求该目录中的文件时将该检查委托给php文件的开销.
提前致谢!
不,那是不可能的.但您可以使用重写映射从程序中获取该信息,而开销比PHP少,可能是shell脚本.
这是一个示例bash脚本:
#!/usr/bin/env bash
while read line; do
max_age=${line%%:*}
filename=${line#*:}
if [[ -f $filename ]]; then
lm=$(stat -f %m "$filename")
if [[ $(date +%s)-$lm -le $max_age ]]; then
echo yes
else
echo no
fi
else
echo no
fi
done
Run Code Online (Sandbox Code Playgroud)
重写映射的声明需要放在您的服务器或虚拟主机配置文件中,因为程序刚启动一次然后等待输入:
RewriteMap last-modified-within prg:/absolute/file/system/path/to/last-modified-within.sh
Run Code Online (Sandbox Code Playgroud)
然后你可以使用这样的重写映射(.htaccess示例):
RewriteCond %{last-modified-within:30:%{REQUEST_FILENAME}} =yes
RewriteRule ^foo/bar$ - [L]
RewriteRule ^foo/bar$ script.php [L]
Run Code Online (Sandbox Code Playgroud)
much出站标头直到晚于mod_rewrite生效时才存在。也没有内置任何文件修改时检查功能mod_rewrite,因此您最接近的使用方式是创建外部重写程序类型的RewriteMap,以查明相关文件是否已被修改。
如果我正确理解您的应用程序,您还可以考虑让 cron 作业删除该目录中超过 30 分钟的文件,然后在文件不存在的情况下重写。
| 归档时间: |
|
| 查看次数: |
3407 次 |
| 最近记录: |