我们有一个 Apache 2.4 服务器。在我们的 WordPress 安装 VHost 中,我们仅允许覆盖Limit
,Options
和FileInfo
. ( AllowOverride Limit Options FileInfo
)。
<VirtualHost *:443>
DocumentRoot /www/www.wordpressblog.com
ServerName www.wordpressblog.com
ServerAlias wordpressblog.com
ErrorLog /var/log/apache2/www.wordpressblog.com_error.log
CustomLog /var/log/apache2/www.wordpressblog.com_access.log combined
SetEnv APPLICATION_ENV production
Include conf-available/server-ssl.conf
<Directory /www/www.wordpressblog.com>
Options FollowSymLinks
AllowOverride Limit Options FileInfo
DirectoryIndex index.php
Order allow,deny
Allow from all
</Directory>
因此,WordPress 插件使用.htaccess
withFilesMatch
来确保底层目录不会被恶意 PHP 脚本滥用。Require all denied
.php
<FilesMatch "\.php$">
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
Order allow,deny
Deny from all
</IfModule>
但是使用这些选项,所有底层可访问文件(例如 CSS)都会以 500 HTTP 状态代码(内部服务器错误)进行响应。
/www/www.wordpressblog.com/wp-content/plugins/awesomeplugin/.htaccess: 此处不允许要求
如果我在 VHost 中扩展,也会AllowOverride
发生AuthConfig
同样的情况,“require 不允许”。但我找不到失败的原因。这也AllowOverride AuthConfig
不能解决问题,因为其他插件可以放置一个.htaccess
“Require all granted”的插件,而我会尽量避免这种情况。