遇到404错误时,可以使用404.php模板文件来呈现自定义错误消息。模板层次结构文章中对此进行了记录。

我的目的是为401、403和500错误创建自定义错误页面。我曾尝试在主题目录中创建401.php,403.php和500.php文件,但这无法正常工作。

如何在WordPress中创建自定义的401、403和500错误页面?

评论

您可以尝试使用以下代码作为起点:jesin.tk/wordpress-custom-403-401-error-page

这是一个现有的插件,可让您自定义错误页面,例如403和401错误:http://wordpress.org/plugins/custom-error-pages/您所要做的就是安装并激活。但是,您必须手动编辑插件选项页面中指定的.htaccess(或nginx.conf)文件。

#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