我在DigitalOcean Droplet上运行了多站点WordPress安装。我添加了Apache的HashSet
模块来缓存我网站上的内容,但是我遇到了一个非常奇怪的问题。设置缓存后,在第一页加载中,站点加载正常。但是,在随后的页面加载中,我得到的是目录索引而不是index.php:
如果我清除缓存,则下一页工作正常。似乎mod_cache
正在缓存目录索引HTML页面,而不是mod_cache
的呈现输出。
这是我的网站配置:
index.php
这是我的<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName jeremydormitzer.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/jeremydormitzer.com
ErrorLog /var/log/jeremydormitzer.com/error.log
CustomLog /var/log/jeremydormitzer.com/access.log combined
<Directory /var/www/html/jeremydormitzer.com/>
AllowOverride All
</Directory>
RewriteEngine on
LoadModule cache_module modules/mod_cache.so
<IfModule mod_cache.c>
LoadModule cache_disk_module modules/mod_cache_disk.so
<IfModule mod_cache_disk.c>
CacheEnable disk /
CacheDisable /wp-admin
</IfModule>
CacheLock on
CacheLockPath "/tmp/mod_cache-lock"
CacheLockMaxAge 5
CacheDisable "http://security.update.server/update-list/"
</IfModule>
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/qa.getpterotype.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/qa.getpterotype.com/privkey.pem
</VirtualHost>
</IfModule>
:
cache_disk.conf
这是我的<IfModule mod_cache_disk.c>
CacheRoot /var/cache/apache2/mod_cache_disk
CacheDirLevels 2
CacheDirLength 1
</IfModule>
:
apache2.conf
有人知道这是怎么回事吗?
根据要求,这是我的网站Mutex file:${APACHE_LOCK_DIR} default
PidFile ${APACHE_PID_FILE}
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
HostnameLookups Off
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
Include ports.conf
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/html>
AllowOverride All
</Directory>
AccessFileName .htaccess
<FilesMatch "^\.ht">
Require all denied
</FilesMatch>
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
IncludeOptional conf-enabled/*.conf
IncludeOptional sites-enabled/*.conf
ServerName 104.236.87.208
UseCanonicalName On
在根路径下的内容:
.htaccess
答案 0 :(得分:1)
我发现了问题所在。有两个:
mod_cache
在服务器处理管道中运行太早。这意味着它在调用PHP脚本之前就缓存了内容,从而导致它缓存了目录索引。要解决此问题,我在配置文件中关闭了CacheQuickHandler
:
CacheQuickHandler off
我的.htaccess
文件(由WordPress自动生成)正在将所有URI重写为/index.php
:
RewriteRule . /index.php [L]
这导致每个页面都以index.php
的形式缓存,这意味着无论何时您访问我网站上的页面,Apache都会提供最后访问的页面。
更改它以将URI重写为index.php/<the path>
可以解决此问题:
RewriteRule ^(.*)$ /index.php/$1 [L]
感谢this ServerFault answer为我指出正确的方向。
答案 1 :(得分:0)
不确定,但是当我看这里https://httpd.apache.org/docs/2.2/mod/mod_cache.html 该示例具有mod_disk_cache,并且您的代码似乎具有mod_cache_disk?