不一致的caching和过期头(杂注:nocache)

我试图让我的Apache服务器(v2.4.7)响应由浏览器和像Google这样的蜘蛛发送的If-Modified-Since头。 我在Google网站pipe理员的build议中发现了这一点。 我直到昨天才知道这一点,也不知道Apache没有回应这个头,因此也没有向浏览器或蜘蛛发送Last-Modified头。

我也注意到,从我的服务器的每一个请求发回杂注:nocache

经过大量的阅读和摆弄,我实际上已经在我的主要网站上工作了。

这只是发现php.ini中的php.ini设置调用session.cache_limiter设置为nocache,所以我把它设置为session.cache_limiter = public

重新启动服务器,瞧,该网站是给予正确的标题,它传递了各种If-Modified-Since头testing器。

现在的问题….在我所有的其他15个WordPress的网站,他们仍然发送杂注:nocache标题和主要网站上显示的其他caching标题。

所有的站点都有完全相同的configuration在他们的apache .conf文件中所有的站点在他们的.htaccess中都有完全相同的configuration所有站点都运行WordPress

我曾尝试在其他网站上设置和取消设置apache .conf文件中的标题,但他们只是被忽略。

对于我的生活,我错过了一些东西,我不知道在哪里或者什么,整天都在经历.conf和.htaccess和php.ini文件。

有什么是干扰标题,我不知道是什么。

这些是我加载的Apache模块,如果有帮助

Loaded Modules: core_module (static) so_module (static) watchdog_module (static) http_module (static) log_config_module (static) logio_module (static) version_module (static) unixd_module (static) access_compat_module (shared) actions_module (shared) alias_module (shared) auth_basic_module (shared) authn_core_module (shared) authn_file_module (shared) authz_core_module (shared) authz_host_module (shared) authz_user_module (shared) autoindex_module (shared) deflate_module (shared) dir_module (shared) env_module (shared) evasive20_module (shared) expires_module (shared) fastcgi_module (shared) filter_module (shared) headers_module (shared) mime_module (shared) mpm_event_module (shared) negotiation_module (shared) pagespeed_module (shared) rewrite_module (shared) setenvif_module (shared) socache_shmcb_module (shared) spamhaus_module (shared) ssl_module (shared) status_module (shared) 

这是-V的输出

 Server version: Apache/2.4.7 (Ubuntu) Server built: Jan 14 2016 17:45:23 Server's Module Magic Number: 20120211:27 Server loaded: APR 1.5.1-dev, APR-UTIL 1.5.3 Compiled using: APR 1.5.1-dev, APR-UTIL 1.5.3 Architecture: 64-bit Server MPM: event threaded: yes (fixed thread count) forked: yes (variable process count) Server compiled with.... -D APR_HAS_SENDFILE -D APR_HAS_MMAP -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled) -D APR_USE_SYSVSEM_SERIALIZE -D APR_USE_PTHREAD_SERIALIZE -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT -D APR_HAS_OTHER_CHILD -D AP_HAVE_RELIABLE_PIPED_LOGS -D DYNAMIC_MODULE_LIMIT=256 -D HTTPD_ROOT="/etc/apache2" -D SUEXEC_BIN="/usr/lib/apache2/suexec" -D DEFAULT_PIDLOG="/var/run/apache2.pid" -D DEFAULT_SCOREBOARD="logs/apache_runtime_status" -D DEFAULT_ERRORLOG="logs/error_log" -D AP_TYPES_CONFIG_FILE="mime.types" -D SERVER_CONFIG_FILE="apache2.conf" 

我现在真的很难过,但我还没有放弃,希望有人能够清楚可能干扰/重写正在发送的头文件。

现在要添加到我的困惑…它发送Last-Modified标题的网站在每个页面上都是错误的

Last-Modified:Tue,02 Dec 2014 11:21:14 GMT

如果我查看页面内的个人资源,他们有正确的最后修改

like my style.css shows Last-Modified:Thu,02 Jun 2016 09:41:24 GMT

所以它是给最后修改的响应,但在顶层,即。 页面本身就有一个过去的date。

在没有发送Last-Modified头文件的网站上,它实际上只是将它们发送给像css,jpg等页面中的资源,而不是页面本身。

所以…… 1个问题变成了2个。

到底发生了什么,到底从哪里来?

这是一个Apache错误? 一个WordPress的错误?

我甚至通过禁用WordPress的网站上没有发送页面的最后修改头,但没有效果的插件。

我仍然认为这是在Apache或PHP内部发生的。

我希望这可以帮助任何其他人在Apache上运行Wordpress网站,我发现这个问题,这完全与Apache无关。

问题是Wordpress从所有页面和post中去掉Etag,Last-Modified,Expires和Cache-Control标题。

但是对于那些想要实际控制什么可以被caching而不被caching的控件,只要删除。

感谢一位为Wordpress编写这样一个插件的人,而且它只是开箱即用。 它也可以通过添加function,filter和钩子到你的主题的functions.php文件进一步定制。

该插件可以从: https : //wordpress.org/plugins/add-headers/

该插件的详细信息和详细的文档位于:

http://www.codetrax.org/projects/wp-add-headers/wiki/Configuration和http://www.codetrax.org/projects/wp-add-headers/wiki/Filter_and_Action_Hooks

所以希望这样可以帮助别人免于失去思想,就像我几乎认为Apache在发生什么事情一样,而不是那么无辜的WordPress正在这样做。

我知道终于可以完全控制我的头再次通过这个插件的钩子和filter,我可以自定义caching时间,即使在个别页面,特别是像购物车系统,我可以设置为零秒caching的东西。 很简单 :)