这个应该是一篇老文章了,不过国内的翻译版似乎都不完整,显然作者依然在更新,我也更新翻译一下好了。
1、移出媒体上传目录
WordPress默认的上传图片和文件目录是wp-content/uploads,可以考虑将该目录移出WordPress主目录或是放到子域名下,这样的好处之一是可以单独备份上传的文件,之二是浏览器可以并行从不同域名下载图片,提升页面加载速度。
修改方式是打开wp-config.php文件,添加以下代码,并需要取消设置中的“按月和年组织上传目录”这个选项勾选。
define( 'WP_CONTENT_URL', 'http://files.domain.com/media' ); define( 'WP_CONTENT_DIR', $_SERVER['HOME'] . '/files.domain.com/media' );
2、从WordPress的代码头部移除不必要的meta标签
如果查看WordPress网站的源代码,有些meta标签其实是不必要的,例如版本信息还可能会对黑客有利。修改方式是在网站所应用的theme目录中,在functions.php文件添加以下代码。
remove_action( 'wp_head', 'wp_generator' ) ; remove_action( 'wp_head', 'wlwmanifest_link' ) ; remove_action( 'wp_head', 'rsd_link' ) ;
3、不允许浏览目录
让浏览器无法浏览文件和目录,在WordPress安装目录的.htaccess文件中添加以下代码。
Options All -Indexes
然后在wp-content/themes和wp-content/plugins目录中放一个空的index.php文件(新版本已经存在)。
4、评论中禁用HTML
WordPress评论中是允许使用HTML标签和超链接的,有可能带来安全隐患,修改functions.php文件,加入以下代码。
add_filter( 'pre_comment_content', 'esc_html' );
5、关闭文章版本控制
WordPress中文章版本控制功能很有用,但是也会增加wp_posts表的大小,因为每次修改都会增加一条记录。禁用版本控制,打开wp-config.php文件,添加以下代码。
define( 'WP_POST_REVISIONS', false);
不过,比较好的方式是限制版本数量,例如以下代码就只保存最近的3次修改。
define( 'WP_POST_REVISIONS', 3);
6、修改文章自动保存时间间隔
在WordPress编辑器进行文章编辑时,为了防止浏览器崩溃造成信息丢失,会自动保存草稿,默认时间间隔是1分钟,在wp-config.php文件,添加以下代码可以将默认时间间隔修改为120秒,即2分钟。
define( 'AUTOSAVE_INTERVAL', 120 );
7、隐藏不必要的RSS Feed
WordPress安装会生成多个RSS Feed,包括文章、评论、分类、存档等等,并会在文章页面的HTML头部标签中自动产生,如果只是需要主要的RSS Feed,在functions.php文件中添加以下代码。
remove_action( 'wp_head', 'feed_links', 2 ); remove_action( 'wp_head', 'feed_links_extra', 3 );
8、维护单一的RSS Feed,将其他重定向
上一步中只是在网站文件头部代码中移除了RSS Feed,但是实际上这些RSS Feed还存在,如果只需要保留一个RSS Feed而禁用其他的,修改.htaccess文件,注意要将其中feed的URL替换成自己的。
RewriteEngine on RewriteCond %{HTTP_USER_AGENT} !^.*(FeedBurner|FeedValidator) [NC] RewriteRule ^feed/?.*$ http://feeds.labnol.org/labnol [L,NC,R=301]
9、禁用WordPress登录提示
在WordPress登录界面输入错误的用户名或密码,会有详细的消息提示,可能会带来安全问题,打开functions.php文件,加入以下代码。
function no_wordpress_errors(){ return 'GET OFF MY LAWN !! RIGHT NOW !!'; } add_filter( 'login_errors', 'no_wordpress_errors' );
10、激活双因素认证
在这个不安全的时代,高度推荐采用双因素认证,虽然WordPress没有自带双因素认证,但是可以利用安装第三方插件激活,例如Authy、Clef、Google Authenticator和Duo Two-Factor Authentication。
11、修改固定链接结构
不使用SEO不友好的默认固定链接结构,可以在Settings -> Permalinks中修改为以下结构。
选项1:/%post_id%/%postname%
选项2:/%category%/%postname%/%post_id%/
12、添加Favicon和Apple Touch Icon
首先创建一个16×16 favicon.ico和144×144 apple-touch.png文件,上传到WordPress目录,然后在.htaccess文件中添加文件的重定向。
RedirectMatch 301 /apple-touch-icon(.*)?.png http://example.com/apple-touch.png
13、禁用索引WordPress脚本
要想让搜索引擎不索引文章之外的PHP文件,打开WordPress目录的robots.txt文件,添加以下代码。
User-agent: * Disallow: /wp-admin/ Disallow: /wp-includes/ Disallow: /wp-content/plugins/ Disallow: /wp-content/themes/ Disallow: /feed/ Disallow: */feed/
14、设置Admin为Subscriber
安全起见,可以新建一个用户,赋予管理员权限,然后用新管理员登录,将admin用户设置为Subscriber。也可以删除admin用户,将其文章转给新用户。
15、向搜索引擎隐藏XML网站地图
XML格式的网站地图有利于搜索引擎抓取网站,但是也会在搜索结果中显示出来,修改.htaccess文件可以防止索引XML网站地图。
Header set X-Robots-Tag "noindex"
16、不使用WordPress搜索
WordPress搜索结果相关性并不好,而且会对数据库产生压力,所以最好使用Google的自定义搜索。如果仍然想使用WordPress搜索,推荐安装Nice Search插件,可以提供更好的结果页面。
17、使用密码保护wp-admin目录
对于wp-admin目录可以增加一层密码保护,
18、在Google Analytics中记录404错误
使用Google Analytics记录404错误,有助于改进网站服务。打开404.php文件,添加以下代码。
< ? if (is_404()) { ?> _gaq.push(['_trackEvent', '404', document.location.pathname + document.location.search, document.referrer, 0, true]); < ? } ?>
19、删除不需要的主题和插件
虽然不会影响WordPress网站的性能,但是从安全角度考虑,可以删除不再使用的主题和插件。
20、避免WordPress猜测URL
WordPress可以猜测URL,例如,如果用户请求labnol.org/hello页面,但是实际上该页面不存在,WordPress可能会重定向到labnol.org/hello-world,而不是404页面。要防止WordPress自作主张,打开functions.php文件,添加以下代码。
add_filter('redirect_canonical', 'stop_guessing'); function stop_guessing($url) { if (is_404()) { return false; } return $url; }
21、为静态内容设置Expiry Headers
一些网站上的静态内容——图片、CSS和javascript——一般很少会有修改,可以设置Expiry Headers,让用户浏览器缓存,提高访问效率,可以参考HTML5 Boilerplate设置Expiry Headers。当然,如果使用了W3 Total Cache这样的插件,插件本身会控制缓存。
ExpiresActive On ExpiresByType image/gif "access plus 30 days" ExpiresByType image/jpeg "access plus 30 days" ExpiresByType image/png "access plus 30 days" ExpiresByType text/css "access plus 1 week" ExpiresByType text/javascript "access plus 1 week"
22、提升WordPress安全
包括在wp_config.php文件安装secret keys,安装文件监控插件(Sucuri或WordFence),修改默认数据表前缀,限制登录试错次数防止暴力攻击。
23、禁用WordPress内部文件编辑
WordPress内部可以编辑插件和主题相关的PHP文件,要禁用此功能,打开wp-config.php文件,添加以下代码。
define( 'DISALLOW_FILE_EDIT', true );
24、移除URL中额外的查询参数
例如,网站是abc.com,用户在URL添加查询参数也可以进行访问,如abc.com/?utm=ga或是abc.com/?ref=feedly,这样会不利于SEO,修改.htaccess文件,防止在URL添加额外的查询参数。
RewriteEngine On RewriteCond %{QUERY_STRING} !="" RewriteCond %{QUERY_STRING} !^p=.* RewriteCond %{QUERY_STRING} !^s=.* RewriteCond %{REQUEST_URI} !^/wp-admin.* RewriteRule ^(.*)$ /$1? [R=301,L]
25、移除Admin工具栏
登录状态下,网站顶部都会出现Admin工具栏,要取消这个工具栏显示,修改functions.php,添加以下代码。
add_filter('show_admin_bar', '__return_false');
26、处理广告屏蔽
如果用户使用广告屏蔽工具,可以使用插件提供文章列表或嵌入视频替换广告。
27、在RSS Feed中插入品牌
在RSS Feed中,为所有文章插入品牌logo,修改functions.php文件,添加以下代码。
function add_rss_logo($content) { if(is_feed()) { $content .= " <hr /> <a href="blog_url"><img src="logo_url" /></a>"; } return $content; } add_filter('the_content', 'add_rss_logo'); add_filter('the_excerpt_rss', 'add_rss_logo');
28、安装基本插件
以下是我推荐的基本插件,供参考,看原文吧,不翻译了。
http://www.labnol.org/software/must-have-wordpress-plugins/14034/
29、长期处于登录状态
WordPress默认的长期登录会保持2周时间,如果是个人计算机,可以修改functions.php文件,增加保持登录的时间。
add_filter( 'auth_cookie_expiration', 'stay_logged_in_for_1_year' ); function stay_logged_in_for_1_year( $expire ) { return 31556926; // 1 year in seconds }
30、移除WordPress的Emoji表情
如果不想使用WordPress的Emoji表情,修改functions.php文件,添加以下代码。
remove_action( 'wp_head', 'print_emoji_detection_script', 7 ); remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
31、跟踪打印页面
使用Google Analytics跟踪网站的打印,当用户打印任何页面时,就会触发事件。在footer.php中添加以下代码,将googleAccountID替换为自己的。
<script> var googleAccountID = "UA-1234-56"; function s4() { return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1); } function guid() { return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4(); } (function(){ var GIF = "https://ssl.google-analytics.com/collect?v=1&t=event" + "&ec=print&tid=" + googleAccountID + "&cid=" + guid() + "&z=" + (Math.round((new Date()).getTime() / 1000)).toString() + "&ea=" + encodeURIComponent(document.title) + "&el=" + encodeURIComponent(document.location.pathname); var rule = "body:after{content:url(" + GIF + ")}"; var head = document.head || document.getElementsByTagName('head')[0]; var css = document.createElement('style'); if (css && head) { css.setAttribute("type", "text/css"); css.setAttribute("media", "print"); if (css.styleSheet) { // For IE css.styleSheet.cssText = rule; } else { css.appendChild(document.createTextNode(rule)); } head.appendChild(css); /* Written by Amit Agarwal - labnol.org */ } })(); </script>
然后登录Google Analytics,在Real Time –> Events中选择Print进行查看。