gpt4 book ai didi

.htaccess - 如何在 .htaccess 中有两个不同的自定义错误页面?

转载 作者:行者123 更新时间:2023-12-03 07:00:38 26 4
gpt4 key购买 nike

1.

我有一个 .haccess 文件,要求您从某个 IP 地址进行访问:

<RequireAll>
Require ip XX.XX.XX.XX.XX YY.YY.YY.YY.YY ZZ.ZZ.ZZ.ZZ.ZZ
</RequireAll>

如果有人尝试从 X、Y 或 Z 以外的 IP 访问该网站,他们会收到错误 403 Forbidden 页面。我使用以下内容对其进行了自定义:

ErrorDocument 403 /.forbidden.php

2.

如果有人尝试访问同一目录中的受限文件(即使他们来自 IP 地址 X、Y 或 Z),他们会再次提示相同自定义 403 Forbidden 页面。

我的问题

如何根据禁止访问的原因拥有两个不同的自定义 403 Forbidden 页面?在示例 1 中,禁止页面为 /.wrongip.php,在示例 2 中,禁止页面为 /.restricted.php

最佳答案

如果这与您正在做的事情的范围有关,那么没关系,但如果您要进行大量重定向,我会考虑在 PHP 中执行此操作,但我离题了。您将必须使用 Apache (2.4) 模块 mod_rewrite重写IP限制部分的规则和条件。我会将您的自定义 403 Forbidden 保留为原样,以处理该状态代码的其他情况。如果您使用共享托管,大多数托管提供商通常会默认启用此模块。

RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^111.222.333.444$
RewriteRule ^(.*)$ /.wrongip.php [L]

如果将规则重写保留在 .htaccess 文件顶部附近,则可能会避免混淆。您只需在文件中添加一次 RewriteEngine On 行。 RewriteCond 是紧随其后的规则的条件之一。您可以将多个条件映射到单个规则(使用 [OR] 标志;默认情况下为 AND 行为)。

在此解决方案中,^ 字符表示字符串的开头。同样,$ 表示结束。因此,^(.*)$ 是一个通配符,将匹配您服务器上访问的任何文件。 /.wrongip.php 部分前面有一个空格分隔符,指示要重定向到的自定义错误页面。 [L] 是一个标志,指示 Apache 服务器一旦与该规则匹配就应停止处理其他规则。除非您使用多个规则来构造单个 URL,否则请使用此选项,否则您可能会感到头疼。

还有一个附加标志 [R],我建议您了解并尽可能使用它,以便更轻松地维护 HTTP 响应代码的良好实践。这些有助于搜索排名,我建议指定 403 响应,因为默认情况下它会抛出 302 错误,随着时间的推移会对排名产生负面影响。将规则更改为 RewriteRule ^(.*)$/.wrongip.php [R=403,L] 将导致 Apache 服务器向浏览器发出 HTTP 重定向 (到 /.wrongip.php)并在 header 中传达 403 Forbidden 错误。由于我的示例将非白名单 IP 的所有页面重定向到 /.wrongip.php,很可能甚至是 /.wrongip.php 本身,我认为在您的具体情况下,[R] 标志将导致 HTTP 重定向循环,他们将继续请求 /.wrongip.php。在这种情况下,您应该省略 [R] 标志,这将导致 Apache 服务器执行内部重定向

如果没有 [R] 标志,客户端将不会知道此重定向已继续(因此内部),因此您仍然应该模拟错误代码使用 PHP 在 /.wrongip.php 文件的 header 中。

关于.htaccess - 如何在 .htaccess 中有两个不同的自定义错误页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48052586/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com