【问题标题】:Deny Wordpress and plugins from updating .htaccess file拒绝 Wordpress 和插件更新 .htaccess 文件
【发布时间】:2014-01-08 18:03:26
【问题描述】:

我在使用 Wordpress 或某些插件时遇到一些问题,偶尔会更新/覆盖我的 .htaccess 文件,这会在访问帖子时返回 404 错误页面。要解决这个问题,我需要再次保存永久链接。

我已经删除了我网站上的 url slug“类别”,所以它看起来像这样:

原创

www.mysite.com/category/post-title

更新了 hack

www.mysite.com/post-title

我安装了 +20 个插件,但我不确定是什么导致了这个问题。

是否可以拒绝 Wordpress 和插件写入 .htaccess 文件?

这是我在 functions.php 中禁用 URL slug 类别的技巧

/* Kill category base */
function kill_category_base ($string) {
$string = str_replace('category/', '', $string);
return $string;
}
add_filter('category_link', 'kill_category_base');

这是我的 .htaccess

# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]

# redirect everything else to wordpress
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L]

RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\.php)$ $1 [L]

# END WordPress

【问题讨论】:

  • wordpress 是否会删除您 htaccess 文件中的所有内容
  • 您可以将 .htaccess 上的文件权限更改为 0444。但您确实需要修剪您的插件。他们不应该在没有特别好的理由的情况下修改 .htaccess,如果您不确定哪个负责,那么我认为他们中的任何一个都没有这样做的充分理由。
  • 另外,您的 htaccess 中的哪些规则被删除而您不想删除?

标签: php wordpress apache .htaccess mod-rewrite


【解决方案1】:

如果你真的知道你在做什么,你可以阻止 wordpress 更新你的.htaccess 文件。将此行放在wp-config.php 的末尾(require_once 之后):

add_filter('got_rewrite', '__return_false');

您也可以在 mu-plugin/plugin 中使用此过滤器。

我比chmod hack 更喜欢这个解决方案,因为它不会在日志中垃圾邮件权限错误。

【讨论】:

    【解决方案2】:

    如果你对你的服务器有 ssh 访问权限,你可以发出以下命令来限制对文件的写访问,这样除了 root 用户之外,没有人可以编辑文件,包括 WordPress:

    chmod 444 .htaccess
    

    您需要以 root 用户或文件的当前拥有用户身份运行此命令。

    如果您没有对服务器的 ssh 访问权限,那么您在这里别无选择。如果是这种情况,您将需要搜索所有插件的代码,并找出是哪个插件写入该文件。然后要么停用该插件,要么更改代码,使其不再写入该文件。

    更新

    我注意到有几个人在这里对我的回答有些胡言乱语。我阅读了所有这些内容,并重新阅读了这个问题,以确定。事实证明,我一定是一开始就误读了这个问题。

    我最初的答案是从安全的角度出发的。我认为问题是从安全的角度来看如何防止文件被覆盖,例如您的网站可能被黑客入侵或其他原因。如果是这种情况,将权限设置为 444 将在 100% 的情况下工作,但您需要对基本上所有文件执行此操作,除了少数文件和上传目录。事实上,这样做,连同让我所有的插件保持最新,防止了我公司个人托管的任何网站被黑客入侵,我们托管了近 300 个,流量从每月 1000 到 5 亿不等。部署过程稍长一些,但保持安全警惕的好处大大超过了额外部署时间的后果。

    但是,问题不是问那个,所以我不好。事实上,在再次查看之后,这次真正理解了这个问题,@mr_mmmmore 已经接近正确的答案。您只需要将您的修改移出# BEGIN WordPress# END WordPress,但还有更多内容。

    如果您希望(大多数)插件也不会覆盖您的更改(不仅仅是核心 WordPress),您需要您的代码包装在类似的标记中。否则,当 htaccess 更新时,您的代码可能仍会被删除。您的最终文件应如下所示:

    # BEGIN MyCodeTop
    RewriteEngine On
    RewriteBase /
    
    # add a trailing slash to /wp-admin
    RewriteRule ^wp-admin$ wp-admin/ [R=301,L]
    # END MyCodeTop
    
    # BEGIN WordPress
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php [L]
    # END WordPress
    
    # BEGIN MyCodeBottom
    RewriteRule ^ - [L]
    RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
    RewriteRule ^(.*\.php)$ $1 [L]
    # END MyCodeBottom
    

    一般来说,WordPress 本身会保留您对 htaccess 文件所做的更改,而不需要修改它们,即使它们不在自己的标记组中;但是,有一些插件会破坏管理 htaccess 文件的核心 WordPress 功能,并以这样的方式滥用它们,最终只会删除您的更改,因为它们不存在于自己的标记组中。为了安全起见,最好遵循 WordPress 标准,制作自己的标记组,然后将代码放入其中。

    感谢@mr_mmmmore 让我在这里重读这个问题,因为我第一次完全错过了重点。加一。

    【讨论】:

    • 从 FTP 客户端(例如 Filezilla)更改文件权限还不够吗?
    • 黑客网站存在问题,其中 nav-menu.php 文件已损坏,在这种情况下(我相信这是那个人提出的原始问题),权限是什么并不重要设置为该文件,它将被此损坏的文件重置为默认文件和 444 权限。检查其他答案。
    【解决方案3】:

    到目前为止,我已经在各个网站上为这个.htaccess reset 问题苦苦挣扎了半年多。

    我的临时解决方案是每次发生这种情况时都重新安装最新的文件系统备份 (.zip)(在某些情况下,这甚至避免了网站正确显示或至少显示,但在大多数情况下,它避免了管理员进入管理面板)。

    真正的解决方案似乎非常简单,但仅适用于您的网站被黑客入侵的情况(尚未能够了解这些网站被黑客入侵的方式或确切时间)。在这种情况下,wp-includes/nav-menu.php 文件已损坏并强制 .htaccess 重置为默认值并将其权限设置为 444。

    因此,解决方案是使用适合您的 WP 版本的正确文件来恢复该文件。

    尽管如此,这并不是解决允许这种黑客攻击发生的安全问题的解决方案,而且我怀疑许多不同的插件可能是这种黑客攻击的漏洞或后门。因此,您可以通过安装Sucuri Security - Auditing, Malware Scanner and Security HardeningWordfence 插件来解决安全问题。

    就个人而言,安装插件以增强网站的安全性似乎类似于在 PC 中安装防病毒软件。我还会推荐一些环境方法,例如 Cloudflare。

    【讨论】:

      【解决方案4】:

      CHMOD 不起作用 Wordpress 重写它 无论线条是否在 Begin 和 ND Wordpress 之间 没有安装插件并 WORDPRESS 重写它 这里没有一个答案是正确的

      【讨论】:

      • 我相信您的情况是因为我对我的回答发表评论,这是一个 nav-menu.php 文件已损坏的被黑网站的问题。 PS:您的评论不应该是答案。
      【解决方案5】:

      拒绝 Worpress 写入 .htaccess 对您遇到的问题来说似乎有些矫枉过正。另外,一些插件依赖于能够写入 .htaccess,所以我不建议在不调查可能的后果(例如缓存插件可能需要添加重写规则)的情况下这样做。

      而且您不必这样做:WP 删除您自己的编辑的原因是因为您将它们放在#BEGIN Wordpress 和#END Wordpress cmets 之间。您无法控制它们之间的内容:将其视为 .htaccess 文件中的保留位置,WP 可以在其中执行所需的任何操作。 WP 未在此处添加的所有内容都会在某个时候被删除。

      所以你所要做的就是将你的编辑移到 BEGIN/END WP cmets 之外,就像这样(你必须决定在 WP 规则之前和之后必须做什么):

      # editings that must run before WP rewrite rules
      #-------------------------
      RewriteEngine On
      RewriteBase /
      
      # add a trailing slash to /wp-admin
      RewriteRule ^wp-admin$ wp-admin/ [R=301,L]
      
      # BEGIN WordPress
      RewriteEngine On
      RewriteBase /
      RewriteRule ^index\.php$ - [L]
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^(.*)$ index.php [L]
      # END WordPress
      
      # editings that must run after WP rewrite rules
      #-------------------------
      RewriteRule ^ - [L]
      RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
      RewriteRule ^(.*\.php)$ $1 [L]
      

      定义在 WP 规则之前或之后必须执行的操作取决于您想要做什么。通常我把 WP 规则放在最后,把我的放在前面。

      【讨论】:

        猜你喜欢
        • 2017-10-30
        • 2021-01-30
        • 1970-01-01
        • 2011-05-30
        • 1970-01-01
        • 2011-05-11
        • 1970-01-01
        • 1970-01-01
        • 2012-02-06
        相关资源
        最近更新 更多