关于 php:.htaccess 改变自身 – 导致 500 内部服务器错误

.htaccess Changing Itself - Causing 500 Internal Server Error

我在 .htaccess 更改自身并导致我的网站上出现 500 - 内部服务器错误时遇到问题。这种变化每隔一天左右发生一次。

我的原始 .htaccess 文件如下所示:

1
2
3
4
5
6
7
8
9
10
11
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

而在它自己改变之后,它看起来是这样的:

1
2
3
4
5
6
7
8
9
10
# BEGIN WordPress<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

本质上,这一行被移到了上一行的末尾:

1
<IfModule mod_rewrite.c>

我们的网站在几周前被黑客入侵并用于网络钓鱼。我们的主机将其关闭,我们进行了更改,他们认为这些更改足以重新打开我们的网站。
我们改变了...

  • 更新到最新版本的 WordPress(我们通常最多
    日期,但晚了几天)。

  • 安装了两个安全插件(Better WP Security 和 Bulletproof
    安全性)。

  • 以及删除我们认为可能已经被删除的论坛插件
    漏洞的原因。

  • 这两个安全插件现已被移除。

  • 我现在更改了 htaccess 文件的权限

我们真的不能让我们的网站再次出现故障(500 服务器错误)。
有什么我错过的可能导致 .htaccess 改变的吗?
注意:当我将更改后的 htaccess 文件替换为原始文件时,它修复了 500 服务器错误。


问题可能是由两个安全插件之间的交互引起的。也许禁用其中一个可以解决问题。

另一种保护您的 htaccess 的方法是将其分配给 root 用户(如果您被允许)和/或使其只读。当然它并没有解决根本问题,但至少包含了效果。


快速浏览一下您的两个安全插件,Bulletproof Security 对您的 .htaccess 文件做了很多改动。就个人而言,我永远不会让插件接触 .htaccess,因为如果插件中存在任何错误,它可能会导致您的站点离线并出现 500 服务器错误。

在禁用 Bulletproof Security 后,我会查看插件在 .htaccess 中尝试执行的操作并手动将其添加到文件中。

或者,您可以尝试在初始注释和以下行之间添加一个额外的行空间,如下所示:

1
2
3
4
5
6
7
8
9
10
# BEGIN WordPress

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

最后,您可以完全取消"IfModule",因为您知道它已安装在您的服务器上:

1
2
3
4
5
6
7
8
# BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]


我遇到了同样的问题,但我终于发现 .htaccess 文件编码应该保留为默认 ANSI 并且错误只是因为我将其编码更改为 UTF8.