我在 CentOS/WHM/Apache 2.2 服务器上运行(对于客户端)一个 Wordpress 站点,并且在我们安装了 AWStats 的子目录中。在我们通过 htaccess 文件应用密码保护之前,一切正常。如果设置了密码保护,则在尝试查看 AStat 时会导致 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 错误,因为它只是添加了这些块中的另一个。
我尝试过的一切似乎都不起作用。
我试过的:
在 Wordpress 段之前和之后分别添加带有write-to-self规则的 htaccess 重写条件。这会导致 404 问题。
在 AWSStats 目录中的 htaccess 文件中添加带有write-to-self规则的 htaccess 重写条件。这会导致 404 问题。
使用指令在 AWSStats 目录中添加一个 htaccess 文件;重写引擎关闭。这会导致 404 问题。
为 AStats 目录创建子域。这只会导致 AWStats 中的配置错误(我似乎无法修复,因此对于比我更了解 AWStats 配置设置的人可能能够使用此解决方案)。
删除密码保护。不理想,这个网站已经成为 Wordpress 垃圾评论发送者、推荐垃圾邮件发送者以及所有其他 PITA 想要滥用一个可怜的手无寸铁的 Wordpress 网站的目标。
我想在不授予客户访问 cPanel 的情况下解决此问题,因为他们希望几个人可以访问 AWStats 中的统计数据(是的,我们确实在网站上安装了 Analytics,客户也需要 AWStats )谁不应访问 cPanel 将提供给他们的所有内容。
有没有人有解决这个特定问题的建议或经验?
我找到的唯一解决方案是手动编辑 Wordpress 的核心文件之一,以便在更新永久链接时包含此行。
在wp-includes/class-wp-rewrite.php中,从第 1512 行(WP v4.6.1)开始,在类中的
mod_rewrite_rules()
方法中WP_rewrite
:正是在这里,我添加了自己的台词。
(在完成 .htaccess 文件中的 Wordpress 命令块之前,该方法会继续运行更多行,如果需要自己编辑其中任何一个,只需编辑您需要指令在序列中的位置)
我将在我为这个客户制作的主题中处理一个自定义函数来接管这个,以处理在 Wordpress 更新期间对这个文件的任何更改。这是快速而肮脏的修复。