我上传了一个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地址的用户尝试访问登录页面时?
谢谢
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