根据 Apache 手册“有两个原因”为什么.htaccess不应该使用文件:服务器性能和服务器安全。(为简洁起见,我没有在此处复制他们的广泛解释。)请参阅:何时(不)使用 .htaccess 文件
通常,除非您无权访问主服务器配置文件,否则您永远不应该使用 .htaccess 文件。例如,有一种普遍的误解,即用户身份验证应始终在 .htaccess 文件中进行。这根本不是那么回事。您可以将用户身份验证配置放在主服务器配置中,这实际上是首选方式。
此外
服务器性能本手册建议始终在服务器配置文件(或包含的配置文件)中进行更改。在您的情况下,主机可以轻松地将您需要进行的任何更改直接应用于服务器配置以确保安全。何时.htaccess允许服务器必须检查服务器上的所有目录以获取指令。一些包含数千个文件夹的臃肿博客和插件(如 TinyMCE)会显着降低数百个虚拟主机的服务器性能。
服务器安全- 禁用.htaccess为主机提供了对服务器配置的独占控制,因为.htaccess它毕竟用于覆盖在httpd.conf. AddType application/x-httpd-php .pdf如果有人恶意添加一行或没有考虑后果(大多数情况下,.htaccess文件可以由具有简单 ftp-only 访问权限的人直接写入服务器。在我从全球共享托管公司获得的许多不安全系统上,读/写访问权限被授予.htaccess文件可能驻留的 Web 根目录(和大多数子目录)。大多数“安全”的 CMS 系统允许上传PDF文件,而他们放弃php上传尝试。
应该怎么做?
- 理想情况下,主机会授予一些覆盖。这可能使一些事情,如
mod_rewrite,mod_auth,mod_deflate,和mod_gzip。
- 主机应将上传到服务器的内容限制为
SFTP或FTP over SSH。(如果他们担心有人从明文中提取密码和登录信息。)
- 主机应该只授予
overrides需要被覆盖的东西。(自定义 404 错误、mod_rewrite指令等)这是不言而喻的,但由于文件的性质.htaccess及其覆盖httpd.conf文件的能力,主机不应在允许的范围内提供所有内容的覆盖。
- 主机应该实现类似IPtables 的东西来处理蛮力尝试。
- 主机可以
allow overrides在不是的自定义文件中.htaccess(他们可以使用AccessFileName重命名文件),这意味着他们可以包含所有文件.accesscfg或自动脚本不会在注入时写入的内容。如果服务器不寻找,.htaccess那么如果有人要添加一个这样命名的文件,则不会执行自动有效负载。
- 房东应该清楚地说明他们为什么要做他们正在做的事情以及他们做了什么,以免浪费客户的时间和自己的资源来解决他们创建的问题的故障单。
为什么主机要阻止.htaccess?
偏执似乎是一个很好的理由,但是在日常stackoverflow.com看到约10-20新[懒]问题后.htaccess,并mod_rewrite与人造成500 internal server errors永不落幕的重定向序列; 并且第一手重写了.htaccess从过去的开发团队(“专业人士”)继承的几个执行得很差的 100 多行文件,以查看单个虚拟主机的 300-500% 性能提升,我可以理解为什么在更大的范围内这看起来更像合乎逻辑的事情。这不是每个人的答案,但是当虚拟集群中可能有 300 多个主机并且他们试图评估整体性能时,很难判断所有重复的流量是否都是坏的.htaccess 依次具有多个重定向的文件,或合法攻击。
此外,大多数主机都削减了支持方面的预算(有些主机现在需要额外收费,甚至在托管专用主机计划中也是如此),因此当有人因为他们的vhost或VPS性能不佳而打电话时,主机必须开始在集群中或在框来确定所有资源的去向。这可能是同时有 20 位客户提出相同的投诉。
如果它是我的服务器,我会要求管理员在您的虚拟主机中进行一些覆盖,并向他们展示您在做什么。向他们展示为什么不允许您进行编辑对他们来说是个坏主意。他们甚至可能会提议使您的虚拟主机中的更改永久化,这将加快整个体验。停止服务器性能的许多重复问题(没有那么多安全性)可能是一种下意识的反应。
如果这是一个真正的安全问题,他们可能会完全阻止 Wordpress。另一方面,请记住将您的管理员帐户重命名为其他名称。