我的目的是为401、403和500错误创建自定义错误页面。我曾尝试在主题目录中创建401.php,403.php和500.php文件,但这无法正常工作。
如何在WordPress中创建自定义的401、403和500错误页面?
#1 楼
错误页面通过.HTACCESS提供服务,如果您使用的是Apache,则可以使用ErrorDocument
伪指令并向其添加状态和URL。在.htaccess文件中如下所示:
ErrorDocument 401 http://yourwebsite.com/error-401
ErrorDocument 403 http://yourwebsite.com/error-403
ErrorDocument 500 http://yourwebsite.com/error-500
您可以在下面使用以下功能。这将为您动态添加HTACCESS文件所需的内容,或者您可以手动进行操作。
1。添加页面:
然后您需要进入仪表板并像任何普通页面一样创建页面(“仪表盘”>“页面”>“新建”)。它们可以按照您希望的名称命名,只需确保该段与下面的函数相同(段:error-401,error-403,error-404,error-500)。您也可以使用页面模板为这些特定页面创建所需的布局和样式。请遵循WordPress Codex说明进行操作。
2。添加功能:
// Create Custom Error Pages in WordPress using HTACCESS
function royal_custom_error_pages() {
// Get HTACCESS path & dynamic website url
$htaccess_file = '.htaccess';
$website_url = get_bloginfo('url').'/';
// Check & prevent writing error pages more than once
$check_file = file_get_contents($htaccess_file);
$this_string = '# BEGIN WordPress Error Pages';
if( strpos( $check_file, $this_string ) === false) {
// Setup Error page locations dynamically
$error_pages .= PHP_EOL. PHP_EOL . '# BEGIN WordPress Error Pages'. PHP_EOL. PHP_EOL;
$error_pages .= 'ErrorDocument 401 '.$website_url.'error-401'.PHP_EOL;
$error_pages .= 'ErrorDocument 403 '.$website_url.'error-403'.PHP_EOL;
$error_pages .= 'ErrorDocument 404 '.$website_url.'error-404'.PHP_EOL;
$error_pages .= 'ErrorDocument 500 '.$website_url.'error-500'.PHP_EOL;
$error_pages .= PHP_EOL. '# END WordPress Error Pages'. PHP_EOL;
// Write the error page locations to HTACCESS
$htaccess = fopen( $htaccess_file, 'a+');
fwrite( $htaccess, $error_pages );
fclose($htaccess);
}
}
add_action('init','royal_custom_error_pages'); // This will run the function everytime, not ideal!
// register_activation_hook( __FILE__, 'royal_custom_error_pages' ); // Using a plugin, runs only once!
移动网站或更改URL结构时,
使用上述功能时要记住的一点是,尽管它会检查ErrorDocument指令是否已经存在在将它们写入HTACCESS文件之前,如果您更改或移动博客以反映更新的页面位置,则不会重写ErrorDocument伪指令。您需要先删除HTACCESS文件中现有的ErrorDocument指令,然后重新运行此函数以创建新的指令。
更正挂钩仅触发一次函数
其他需要注意的功能是此功能,每次加载页面时都会使用
init
操作,这是超级不必要和浪费的,所以我建议将其添加到插件中并使用register_activation_hook
,这样在激活插件时仅触发一次文件许可权
此外,使用上述功能时,.htaccess必不可少,因此请确保它具有正确的文件许可权,例如CHMOD777。
评论
不知道该如何工作,是否手动编辑了.htaccess文件,但这不起作用。我正在尝试在localhost上执行此操作,在localhost上应该可以执行此操作,因为我可以访问所有内容,服务器和客户端。但是为什么这不起作用?
–所罗门·克洛森(Solomon Closson)
16-4-26的3:34
@SolomonClosson,也许您可以尝试使用我为此编写的插件,它将为您做所有事情,并完全按照上面的代码进行:)。官方WordPress.Org插件
–马特皇家
16-4-26在8:04
@MattRoyal该功能很好用,我正在使用它来创建其他htaccess规则。如何将规则插入文件的最上方,请高于默认wp htaccess规则?目前,规则已添加到htaccess文件的底部。谢谢。
–lowtechsun
18年2月12日在15:27
我不同意该解决方案:1-您不应在网络服务器上使用任何777功能!通常,这只是一种不好的做法,并且会导致重大的安全漏洞。 2-您正在向网站的每个请求添加文件写操作,这是一种写操作,它将在文件上创建一个锁,在您减少请求数量并同时响应时,仅允许一次写操作。 3-网站不应该依赖其运行服务器,如果迁移到使用nginx的系统,它将按预期停止运行。 ...继续
–爱德华多·奥利维拉(Eduardo Oliveira)
19 Sep 10'9:41
4-有更干净的方法来捕获错误stackoverflow.com/a/34619308/768516
–爱德华多·奥利维拉(Eduardo Oliveira)
19-09-10在9:45
评论
您可以尝试使用以下代码作为起点:jesin.tk/wordpress-custom-403-401-error-page这是一个现有的插件,可让您自定义错误页面,例如403和401错误:http://wordpress.org/plugins/custom-error-pages/您所要做的就是安装并激活。但是,您必须手动编辑插件选项页面中指定的.htaccess(或nginx.conf)文件。