网页最后修改日期未知

网页最后修改日期未知

我想在网页上检查文档的年龄,但它没有显示!这是 telnet 到服务器的结果:

telnet av.hostoi.com 80
Connected to av.hostoi.com.
HEAD / HTTP/1.0

HTTP/1.1 200 OK
Date: Tue, 23 Oct 2012 16:55:40 GMT
Server: Apache
X-Powered-By: PHP/5.2.17
Connection: close
Content-Type: text/html

Connection closed by foreign host. 

在另一台服务器上还包含上面没有的以下两行:

Last-Modified: Fri, 17 Jun 2011 11:17:45 GMT
ETag: "2ce392-b1-4a5e688eae840"

因此我在互联网上搜索,据我所知,apache 中应该有一个配置可以在 htaccess 中设置 headers 和 etag?但我找不到任何显示该信息的地方。

如果有帮助的话,这里是 apache 中加载的模块:

核心 mod_authn_file mod_authn_default mod_authz_host mod_authz_groupfile mod_authz_user mod_authz_default mod_auth_basic mod_include mod_filter mod_log_config mod_env mod_expires mod_headers mod_setenvif mod_version prefork http_core mod_mime mod_status mod_autoindex mod_asis mod_info mod_vhost_alias mod_negotiation mod_dir mod_actions mod_alias mod_rewrite mod_so mod_php5 mod_ruid2

据我所知,必须启用 mod_header,这似乎是事实?

编辑:尝试了建议的解决方案:将 .htaccess 文件放在 / 文件夹中,即使有一个名为“请勿在此处上传”的文件。.htaccess 的内容:

#Do not remove this line, otherwise mod_rewrite rules will stop working
RewriteBase / 
Options -Indexes 
SSILastModified on

<IfModule mod_expires.c>
FileETag MTime Size ExpiresActive on

ExpiresDefault "access plus 10 days"

ExpiresByType application/javascript "access plus 1 week" ExpiresByType application/x-javascript "access plus 1 week" ExpiresByType application/x-shockwave-flash "access plus 1 week"

ExpiresByType text/css "access plus 1 week"

ExpiresByType image/jpg "access plus 1 month" 
ExpiresByType image/jpeg "access plus 1 month" 
ExpiresByType image/gif "access plus 1 month" 
ExpiresByType image/png "access plus 1 month" 
ExpiresByType image/x-icon "access plus 6 month" 
ExpiresByType image/ico "access plus 6 month"
</IfModule>

我将此文件放在 public_html 文件夹和包含文件 update.ver 的子文件夹 nod_update3 中。然后我执行检查文档年龄的脚本,如下所示:

./check_http -H av.hostoi.com -u /nod_update3/update.ver -M 2d
HTTP CRITICAL: HTTP/1.1 200 OK - Document modification date unknown - 26316 bytes in 0,159 second response time |time=0,158965s;;;0,000000 size=26316B;;;0

如您所见,尽管 ftp 客户端显示最后修改时间为 2012 年 10 月 25 日,但没有显示修改日期

我尝试检查同一文件夹中的另一个文件,如下所示:

./check_http -H av.hostoi.com -u /nod_update3/em000_32_l0.nup -M 2d
HTTP CRITICAL: HTTP/1.1 200 OK - Last modified 13,5 days ago - 56472 bytes in 1,059 second response time |time=1,059014s;;;0,000000 size=56472B;;;0
srvmon plugins #

如您所见,修改日期是已知的。那么 ver 文件为什么会出现问题?您可以在此 URL 中检查该文件:http://av.hostoi.com/nod_update3//update.ver

答案1

X-Powered-By: PHP/5.2.17

看起来该页面是由 PHP 生成的,在这种情况下,Apache 不知道 Last Modified tamestamp。在这种情况下,PHP 脚本负责设置标Last-Modified头,但它显然没有这样做。

如果这些只是静态文件,那么您可能希望配置 Apache 以直接为它们提供服务,而不是通过 PHP 脚本为它们提供服务。如果它们不是静态文件,那么您需要修复 PHP 脚本以Last-Modified正确设置标头。

答案2

通过追溯Apache的源代码,我们可以看到这种错误配置的根本原因是“Xbithack Full”启用的语义隐式覆盖了“SSILastModified On”启用的语义。

if (conf->lastmodified > 0) {
  ... {
   ap_update_mtime(r, r->finfo.mtime);
   ap_set_last_modified(r);}}

else if (((conf->xbithack == XBITHACK_FULL ||
         (conf->xbithack == XBITHACK_UNSET &&
                DEFAULT_XBITHACK == XBITHACK_FULL))
        ...)) {
        ap_update_mtime(r, r->finfo.mtime);
        ap_set_last_modified(r);
}

因此,一个可能的解决方案是将“SSILastModified on”更改为“XBitHack full”。

答案3

我们终于换了一家新的托管服务提供商,现在一切都正常了。谢谢你的帮助,祝你圣诞快乐。以下是检查结果。

srvmon plugins # ./check_http -H baza32.info  -u /nod_update3/update.ver  -M 3d

HTTP OK: HTTP/1.1 200 OK - 26168 bytes in 0,219 second response time |time=0,218608s;;;0,000000 size=26168B;;;0

相关内容