Wordpress的.htaccess设定

Clloz · · 992次浏览 ·

前言

我的博客的 web 服务用用的 apache,对于网站,我们有很多文件不希望被访问,特别是有些目录会在被用户访问以后显示 index 就是文件的索引,web 服务器可以帮我们配置我们想要的功能,下面就来分享一下我的 .htaccess 的设置。

.htaccess

.htaccessapache 的分布式配置文件,提供了仅针对所在目录的改变配置的方法,会作用于所有子目录,可以帮我们实现如 网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档 等功能。apache 的配置文件是在 /etc/httpd/conf/httpd.conf,修改这个文件会作用于所有通过 web 服务器访问的文件,为了配置的灵活,我们还是在自己的网站所在目录进行配置比较好,只要在我们网站根目录创建 .htaccess文件就可以了。

需要的功能

禁止目录浏览

apache 默认是开启目录浏览的,就是当我们访问网站的一些文件夹时,由于没有路由定向,会显示一个 Index of /wp-content 的页面,显示访问的文件夹下的文件列表,这是非常不安全的,我们不希望被用户看到我们网站下所有的文件。

directory-browsing

使用下面的配置,禁用当前目录的 index

# Disable directory browsing
Options All -Indexes

IP 黑名单

这个功能用来禁止一些你想拉黑的 IP 访问你的网站,我没有使用,不过如果你要用的话用下面的方法配置:

# Block one or more IP address.
# Replace IP_ADDRESS_* with the IP you want to block

<Limit GET POST>
order allow,deny
deny from IP_ADDRESS_1
deny from IP_ADDRESS_2
allow from all
</Limit>

其中的 IP_ADDRESS_1 就是用来存放你要禁止的 IP

禁止用户访问 wp-includes

wp-includeswordpress 的核心文件所在,并且所有的插件和主题也不会访问该文件夹,所以我们应该禁止所有用户访问这个文件夹,用正则表达式来 Rewrite,让访问 wp-includes 的请求直接 rewrite403

# Block wp-includes folder 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>

RewriteRule 后面的第一个参数是匹配请求 url 的正则表达式,- 后面的是 flagF 表示将 url 重写到 403L 表示最后一条,就跟 switch case 中的 break差不多,匹配成功就不会执行下面的了。

仅允许选定的IP访问 wp-admin

这个功能我没有使用,也就是只有配置中的IP才能访问后台,如果你有需要可以用如下配置

# Limit logins and admin by IP
<Limit GET POST PUT>
order deny,allow
deny from all
allow from your-ip
allow from IP_ADDRESS_2
</Limit>

只允许访问 wp-content 中特定类型的文件

我们也不希望用户访问 wp-content 中的文件,但是由于 wp-content 中有插件和主题所需要的一些样式文件等等,如果我们禁止了一切请求,那么我们在后台操作的时候会发现界面一团糟,一些插件的功能无法使用了,因为它们没法访问到 wp-content 中的文件,所以一个折中的办法是,我们只允许一些固定类型的文件可以被访问,比如 css,js 等。需要注意的是,下面的配置要在 wp-content 文件夹中新建一个 .htaccess,如果你还想写在根目录下的文件中,记得加上路径。

# Disable access to all file types except the following
Order deny,allow
Deny from all
<Files ~ ".(xml|css|js|jpe?g|png|gif|pdf|docx|rtf|odf|zip|rar)$">
Allow from all
</Files>

拒绝用户访问wp-config.php和.htaccess

wp-config.php 包含了你的数据库用户名密码等非常敏感的信息,所以我们应该禁止任何人访问这个文件。

# Deny access to wp-config.php file
<files wp-config.php>
order allow,deny
deny from all
</files>

至于 .htaccess 文件 apache 在自己的配置文件中似乎已经禁止了,如果你不放心,把下面的配置加到你的文件中。

# Deny access to all .htaccess files
<files ~ "^.*.([Hh][Tt][Aa])">
order allow,deny
deny from all
satisfy all
</files>

重定向到 https 以及自定义错误页面

我的网站开启了 https 所以我把所有的请求重定向到80端口了;如果你把错误页面弄漂亮一点,自己上传一个,然后添加到配置中去,配置如下:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.clloz.com/$1 [R=301,L]
ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
ErrorDocument 500 /500.html
ErrorDocument 503 /503.html
</IfModule>

wordpress 会重制你的.htaccess

这个问题我在另一篇文章里面已经写过,这里再说一下,当你在后台点击设置中的固定链接时,wordpress 会重制 .htaccess 中的一部分,当你编辑 .htaccess 的时候应该已经发现了,有几行代码原来就在其中,被 # BEGIN WordPress # END WordPress 包裹的部分,就是这部分会被重制,所以你自己的配置就不要写到这中间去了,否则一不小心就被重置了。

总结

虽然我们的个人博客可能并没有很多人访问,也不太会有人特意攻击,但是做好安全工作是一个好的习惯,也是不错的经验。如果你使用 nginxgoogle 一下吧,我一直也想把 web 服务器换 nginx不过一直没时间折腾,等有闲暇了在搞。

参考文章

Best .htaccess Snippets to Improve WordPress Security


Clloz

人生をやり直す

3 个评论

流癣多 · 2019年7月22日 - 下午2:55

我的博客被机器人攻击,导致几个g被阿里云停用。
我已经将域名重定向你的博客,我就试试会不会搞你。
珍重。
2019-07-22 :mrgreen: :neutral:

草莓 · 2019年9月2日 - 下午5:48

感觉你的网站设计都很好看,之前自己用hexo搭建过个人的博客,无奈加载起来太卡,你这个好流畅,出一篇完整教程吧,大神 :cowboy:

草莓 · 2019年9月2日 - 下午5:48

感觉你的网站设计都很好看,之前自己用hexo搭建过个人的博客,无奈加载起来太卡,你这个好流畅,出一篇完整教程吧,大神 :cowboy:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

我不是机器人*

 出现新的回复时用邮件提醒我。

EA PLAYER &

历史记录 [ 注意:部分数据仅限于当前浏览器 ]清空

      00:00/00:00