基于mod_rewrite的的RewriteCond上次修改? (htaccess的)(mod_

2019-08-02 04:47发布

我知道,我们可以很容易地立足于任何HTTP 请求头中的RewriteCond。 但是,我们可以检查(部分)的响应头是将要发送? 特别是, 上次修改吗?

我想重写URL仅在最后修改日期为30分钟以上老年人和我试图避免委托,办理入住手续的PHP文件要求从该目录中的文件每一次的开销。

提前致谢!

Answer 1:

出站头不存在,直到much晚于mod_rewrite行事。 目前也没有任何文件修改时间检查内置功能mod_rewrite ,所以你会得到使用,它正在一个最接近RewriteMap指令的外部重写程序品种,以找出是否有问题的文件已被修改。

如果我没有理解你的应用程序,你也可以考虑有一个cron作业,该目录中年纪超过30分钟,删除文件,然后重写一个文件不存在的条件。



Answer 2:

不,那是不可能的。 但是你可以使用一个重写映射来得到一个程序,信息比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

需要重写地图的声明放置在您的服务器或虚拟主机configuraion文件作为程序刚启动一次,然后等待输入:

RewriteMap last-modified-within prg:/absolute/file/system/path/to/last-modified-within.sh

然后你可以使用重写映射像这样(的.htaccess为例):

RewriteCond %{last-modified-within:30:%{REQUEST_FILENAME}} =yes
RewriteRule ^foo/bar$ - [L]
RewriteRule ^foo/bar$ script.php [L]


Answer 3:

你有没有考虑使用mod_proxy,mod_cache的,和/或鱿鱼? 这听起来像你想推出自己的缓存...



文章来源: mod_rewrite RewriteCond based on Last-modified? (.htaccess)