有关加载403/404错误页面和htaccess的问题

时间:2017-09-17 作者:Henry

我上传了一个html 403和404页面到我的WordPress主题目录,如果我在之后遇到了一个随机错误。com,如。com/yyyy然后加载404页,例如-所以一切都很好。。。

然而我想要403。当我允许的IP字符串之外的人试图访问我的登录页面时,将显示php。

这htaccess规则工作得很好,但它在WordPress试图找到403时创建了一个永无止境的循环。php页面。。

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} ^(.*)?wp-login\\.php(.*)$ [OR]
RewriteCond %{REQUEST_URI} ^(.*)?wp-admin$
RewriteCond %{REMOTE_ADDR} !^111\\.111\\.22\\.33$
RewriteRule ^(.*)$ - [R=403,L]
</IfModule> 
所以你可以在最后一行看到,有一个R=403,它正在试图找到403页,但它找不到它。。。

因此,我添加了以下几行(一次尝试一行),但它们不起作用:

ErrorDocument 403 /403.php
ErrorDocument 404 /404.php
然后我试着

ErrorDocument 403 /index.php?error=403
ErrorDocument 404 /index.php?error=404
没有快乐。。。

403和404模板的顶部是否应该有特定于WordPress的php?

或者-我怎样才能正确地调用403。php当没有正确IP地址的用户尝试访问登录页面时?

谢谢

2 个回复
SO网友:MrWhite

当WordPress试图找到403时,它会创建一个永无止境的循环。php页面

不是WordPress,而是Apache。WordPress甚至从来没有看到过这个请求。

您需要为自定义403错误文档创建一个例外,否则,您发布的指令将为错误文档本身发出另一个403。。。无休止的循环。

如果您的ErrorDocument 定义如下:

ErrorDocument 403 /403.php
然后,您可以在现有规则之前创建一个异常,如下所示:

RewriteRule ^403\\.php$ - [L]
/403.php 要求提供文件。

或者,将其合并到现有规则块中。例如:

RewriteCond %{REQUEST_URI} ^(.*)?wp-login\\.php(.*)$ [OR]
RewriteCond %{REQUEST_URI} ^(.*)?wp-admin$
RewriteCond %{REMOTE_ADDR} !^111\\.111\\.22\\.33$
RewriteRule !^403\\.php$ - [R=403,L]
The! 上的前缀RewriteRule 模式否定正则表达式。因此,只有当/403.php 未请求文档。请注意[R=403,L] 与相同[F].

或者,您可以简单地禁用自定义错误文档,并使用Apache的默认错误响应:

ErrorDocument 403 default

SO网友:Asisten

Wordpress内置了404和403模板,它在404中调用。php和403。模板中的php。

或者,您还可以定义当检测到的http响应代码发送指定的错误代码时,将加载哪个页面/操作,将其放在您的函数中。php文件:

function detect_response_header(){ if (http_response_code() == 403) { // do some action here, include template file, redirect to outside wordpress environment (file that not WordPress not involved in your site) or whatever } } add_action(\'template_redirect\',\'detect_response_header\');

参考号:

https://codex.wordpress.org/Plugin_API/Action_Reference/init

结束