15 个对您的 WordPress 网站有用的 .htaccess 片段
如果您想提高安全性并减少WordPress 网站上的漏洞,拥有一个配置良好的 .htaccess 文件至关重要。通常,创建自定义 .htaccess 文件的主要目的是防止您的网站被黑客入侵,但它也是处理重定向和管理缓存相关任务的绝佳方式。
.htaccess 是Apache Web 服务器上使用的配置文件。大多数 WordPress 站点都在 Apache 服务器上运行,尽管有一小部分由 Nginx 提供支持。在本文中,您可以找到一组 .htaccess 代码片段,其中大部分可用于保护您的网站,而其余部分可实现其他有用的功能。
另请阅读:
面向设计师和开发人员的 .htaccess 初学者指南
不要忘记在编辑之前备份 .htaccess 文件,以便在出现问题时始终可以返回到以前的版本。
而且,如果您不想接触配置文件,我向您推荐BulletProof Security插件,它是市场上最可靠(也可能是最古老)的免费 .htaccess 安全插件。
创建默认的 WP .htaccess
.htaccess 在每个目录的基础上工作,这意味着每个目录都可以有自己的 .htaccess 文件。您的 WordPress 网站还没有 .htaccess 文件很容易发生。如果您在根目录中找不到 .htaccess 文件,请创建一个空文本文件并将其命名为 .htaccess .htaccess
。
下面,您可以找到WordPress 使用的默认 .htaccess。每当您需要此代码时,您都可以在WordPress Codex中快速查找。请注意, WP Multisite有不同的 .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 > # END WordPress |
以 开头的行#
是注释。不要在行# BEGIN WordPress
和之间编辑任何内容# END WordPress
。在这些默认规则下方添加您的自定义 .htaccess 规则。
您可以在本文中找到的所有代码片段都转到根目录中的核心 .htaccess 文件。
1.拒绝访问所有.htaccess文件
下面的代码拒绝访问您在 WordPress 中安装的所有 .htaccess 文件。这样您就可以防止人们看到您的Web 服务器配置。
1个
2个
3个
4个
5个
6个
|
# Denies access to all .htaccess files <Files ~ "^.*\.([Hh][Tt][Aa])" > Order Allow,Deny Deny from all Satisfy all < /Files > |
2.保护您的WP配置
该wp-config.php
文件包含您所有的 WP 配置,包括您的数据库登录名和密码。您可以拒绝所有人访问它,也可以授予管理员访问它的权限。
如果您选择后者,请注释掉该# Allow from xx.xx.xx.xxx
行(#
从该行的开头删除)并插入管理员的 IP 地址代替xx.xx.xx.xxx
.
1个
2个
3个
4个
5个
6个
7
|
# Protects wp-config <Files wp-config.php> Order Allow,Deny # Allow from xx.xx.xx.xxx # Allow from yy.yy.yy.yyy Deny from all < /Files > |
3.防止XML-RPC DDoS攻击
WordPress默认支持 XML-RPC ,这是一个使远程发布成为可能的接口。然而,虽然这是一个很棒的功能,但它也是 WP 最大的安全漏洞之一,因为黑客可能会利用它进行 DDoS 攻击。
如果您不想使用此功能,最好禁用它。就像以前一样,您可以通过注释掉该# Allow from xx.xx.xx.xxx
行并添加管理员的 IP 来添加例外。
1个
2个
3个
4个
5个
6个
7
|
# Protects XML-RPC, prevents DDoS attack <FilesMatch "^(xmlrpc\.php)" > Order Deny,Allow # Allow from xx.xx.xx.xxx # Allow from yy.yy.yy.yyy Deny from all < /FilesMatch > |
4.保护您的管理区域
通过仅向管理员授予访问权限来保护管理区域也是一个好主意。在这里,不要忘记添加至少一个“允许”例外,否则您将根本无法访问您的管理员。
1个
2个
3个
4个
5个
6个
7
8个
9
10
11
|
# Protects admin area by IP AuthUserFile /dev/null AuthGroupFile /dev/null AuthName "WordPress Admin Access Control" AuthType Basic <LIMIT GET> Order Deny,Allow Deny from all Allow from xx.xx.xx.xxx Allow from yy.yy.yy.yyy < /LIMIT > |
5.防止目录列表
大多数 WordPress 站点不禁用目录列表,这意味着任何人都可以浏览他们的文件夹和文件,包括媒体上传和插件文件。不用说,这是一个巨大的安全漏洞。
下面,您可以看到典型的 WordPress 目录列表的样子。
幸运的是,您只需要一行代码即可阻止此功能。此代码片段将向任何想要访问您的目录的人返回 403 错误消息。
1个
2个
|
# Prevents directory listing Options -Indexes |
6.防止用户名枚举
如果启用了 WP 永久链接,则可以很容易地使用作者档案枚举用户名。显示的用户名(包括管理员的用户名)随后可用于暴力攻击。
将下面的代码插入到您的 .htaccess 文件中以防止用户名枚举。
1个
2个
3个
|
# Prevents username enumeration RewriteCond %{QUERY_STRING} author=d RewriteRule ^ /? [L,R=301] |
7. 阻止垃圾邮件发送者和机器人
有时您可能希望限制来自某些 IP 地址的访问。此代码片段提供了一种简单的方法来阻止您已经知道的垃圾邮件发送者和机器人。
1个
2个
3个
4个
5个
6个
7
|
# Blocks spammers and bots <Limit GET POST> Order Allow,Deny Deny from xx.xx.xx.xxx Deny from yy.yy.yy.yyy < /Limit > Allow from all |
8.防止图片盗链
虽然不是安全威胁,但图像盗链仍然是一件令人讨厌的事情。人们不仅会在未经您许可的情况下使用您的图片,甚至会以您为代价。使用这几行代码,您可以保护您的站点免受图像盗链。
1个
2个
3个
4个
5个
6个
|
# Prevents image hotlinking RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http(s)?: // (www\.)?yourwebsite.com [NC] RewriteCond %{HTTP_REFERER} !^http(s)?: // (www\.)?yourwebsite2.com [NC] RewriteRule \.(jpe?g?|png|gif|ico|pdf|flv|swf|gz)$ - [NC,F,L] |
9. 限制直接访问插件和主题 PHP 文件
如果有人直接调用您的插件和主题文件,无论是意外发生还是被恶意攻击者调用,都会很危险。此代码片段来自 Acunetix 网站安全公司;您可以在他们的博客文章中阅读有关此漏洞的更多信息。
1个
2个
3个
4个
5个
6个
7
|
# Restricts access to PHP files from plugin and theme directories RewriteCond %{REQUEST_URI} !^ /wp-content/plugins/file/to/exclude \.php RewriteCond %{REQUEST_URI} !^ /wp-content/plugins/directory/to/exclude/ RewriteRule wp-content /plugins/ (.*\.php)$ - [R=404,L] RewriteCond %{REQUEST_URI} !^ /wp-content/themes/file/to/exclude \.php RewriteCond %{REQUEST_URI} !^ /wp-content/themes/directory/to/exclude/ RewriteRule wp-content /themes/ (.*\.php)$ - [R=404,L] |
10. 设置永久重定向
您可以使用 .htaccess轻松处理永久重定向。首先,您必须添加旧 URL,然后按照指向您要将用户重定向到的页面的新 URL进行操作。
1个
2个
3个
|
# Permanent redirects Redirect 301 /oldurl1/ http: //yoursite .com /newurl1 Redirect 301 /oldurl2/ http: //yoursite .com /newurl2 |
11. 将访问者引导至维护页面
我们在这里详细介绍了这项技术。您需要一个单独的维护页面(maintenance.html
在示例中)才能使此 .htaccess 规则起作用。此代码将您的 WordPress 站点置于维护模式。
1个
2个
3个
4个
5个
6个
7
8个
|
# Redirects to maintenance page <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REMOTE_ADDR} !^123\.456\.789\.000 RewriteCond %{REQUEST_URI} ! /maintenance .html$ [NC] RewriteCond %{REQUEST_URI} !\.(jpe?g?|png|gif) [NC] RewriteRule .* /maintenance .html [R=503,L] < /IfModule > |
12.限制对WP的所有访问包括
该/wp-includes/
文件夹包含CMS 工作所需的核心 WordPress 文件。此处没有内容、插件、主题或用户可能想要访问的任何其他内容。因此,要加强安全性,最好限制对它的所有访问。
1个
2个
3个
4个
5个
6个
7
8个
9
10
|
# Blocks all wp-includes folders and files <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^wp-admin /includes/ - [F,L] RewriteRule !^wp-includes/ - [S=3] RewriteRule ^wp-includes/[^/]+\.php$ - [F,L] RewriteRule ^wp-includes /js/tinymce/langs/ .+\.php - [F,L] RewriteRule ^wp-includes /theme-compat/ - [F,L] < /IfModule > |
13. 阻止跨站脚本(XSS)
以下代码片段来自WP Mix,它可以保护您的网站免受一些常见的 XSS 攻击,即脚本注入和修改全局变量和请求变量的尝试。
1个
2个
3个
4个
5个
6个
7
|
# Blocks some XSS attacks <IfModule mod_rewrite.c> RewriteCond %{QUERY_STRING} (\<|) [NC,OR] RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR] RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) RewriteRule .* index.php [F,L] < /IfModule > |
14.启用浏览器缓存
正如我之前提到的,.htaccess 不仅有利于安全和重定向,而且还可以帮助您管理缓存。下面的代码片段来自Elegant Themes,它使访问者能够保存某些类型的文件,从而使浏览器缓存成为可能,这样他们下次访问时就不必再次下载它们。
1个
2个
3个
4个
5个
6个
7
8个
9
10
11
12
13
14
|
# Enables browser caching <IfModule mod_expires.c> ExpiresActive On ExpiresByType image /jpg "access 1 year" ExpiresByType image /jpeg "access 1 year" ExpiresByType image /gif "access 1 year" ExpiresByType image /png "access 1 year" ExpiresByType text /css "access 1 month" ExpiresByType application /pdf "access 1 month" ExpiresByType text /x-javascript "access 1 month" ExpiresByType application /x-shockwave-flash "access 1 month" ExpiresByType image /x-icon "access 1 year" ExpiresDefault "access 2 days" < /IfModule > |
15.设置自定义错误页面
您可以使用 .htaccess 在您的 WordPress 网站上设置自定义错误页面。要使此方法起作用,您还需要创建自定义错误页面(custom-403.html
在custom-404.html
示例中为 )并将它们上传到您的根文件夹。
您可以为您想要的任何HTTP 错误状态代码(4XX 和 5XX 状态代码)设置自定义错误页面。
1个
2个
3个
|
# Sets up custom error pages ErrorDocument 403 /custom-403 .html ErrorDocument 404 /custom-404 .html |
另请阅读:
如何将 WordPress 网站置于维护模式