我正在为客户在 CentOS/WHM/Apache 2.2 服务器上运行 Wordpress 网站,并在子目录中安装了 AWStats。在我们通过 htaccess 文件应用密码保护之前,一切正常。设置密码保护后,尝试查看 AWStats 时会出现 404 错误。
经过多次反复尝试后,我们发现问题出在 Wordpress htaccess 规则上。
使用下列方法进行调整:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
# The following line is the line we added
RewriteCond %{REQUEST_URI} ^wp-content/stats(.*)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
(AWStats 安装在 wp-content 的子文件夹中,因为这样与 Wordpress 相关的问题最少)
一切运行正常,直到 Wordpress 自动更新删除了所有更改并将此 htaccess 块恢复为默认值。进行此更改并删除 #Begin/End Wordpress 标记会导致在下次 Wordpress 更新时出现 500 错误,因为它只是添加了另一个这样的块。
我尝试过的一切似乎都不起作用。
我已尝试过:
添加 htaccess 重写条件写给自己规则分别位于 Wordpress 段之前和之后。这会导致 404 问题。
添加 htaccess 重写条件写给自己AWStats 目录内的 htaccess 文件中的规则。这会导致 404 问题。
在 AWStats 目录中添加一个 htaccess 文件,其中包含指令;RewriteEngine Off。这会导致 404 问题。
为 AWStats 目录创建子域。这只会导致 AWStats 中出现配置错误(我似乎无法修复,因此对于比我更了解 AWStats 配置设置的人来说,可以使用此解决方案)。
删除密码保护。这可不是什么好事,这个网站已经成为 Wordpress 评论垃圾邮件发送者、引荐垃圾邮件发送者以及所有其他想要滥用可怜的、毫无防御能力的 Wordpress 网站的 PITA 的目标。
我想解决这个问题,而无需授予客户访问 cPanel 的权限,因为他们希望几个人都可以访问 AWStats 中的统计数据(是的,我们也在网站上安装了 Analytics,客户希望 AWStats以及) 他们不应该访问 cPanel 提供给他们的所有内容。
有人对解决这个特定问题有建议或经验吗?
答案1
我发现的唯一解决方案是手动编辑 Wordpress 的核心文件之一,以便在更新永久链接时包含此行。
在wp-includes/class-wp-rewrite.php从第 1512 行(WP v4.6.1)开始,在类mod_rewrite_rules()
中的方法中WP_rewrite
:
$rules = "<IfModule mod_rewrite.c>\n";
$rules .= "RewriteEngine On\n";
$rules .= "RewriteBase $home_root\n";
// Prevent -f checks on index.php.
$rules .= "RewriteRule ^index\.php$ - [L]\n";
我在这里添加了我自己的台词。
$rules .= "RewriteCond %{REQUEST_URI} ^wp-content/stats(.*)\n";
(该方法在完成 .htaccess 文件中的 Wordpress 命令块之前会继续执行很多行,如果您需要自己编辑其中任何一行,只需编辑您需要指令在序列中的位置即可)
我将开发一个自定义函数来接管我为该客户制作的主题中的这一功能,以处理 Wordpress 更新期间对此文件的任何更改。这是一个快速而粗略的修复。