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

佐藤

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),那么他们会再次提示您具有SAME自定义403 Forbidden页面。

我的问题

如何403 Forbidden基于禁止访问的原因来创建两个不同的自定义页面?在示例1中,禁止页面将/.wrongip.php在示例2中显示/.restricted.php

博尔

如果这是关于您正在执行的操作的范围,那很好,但是如果您将要进行大量重定向,我会考虑在PHP中执行此操作,但我偏离了方向。您将必须使用Apache(2.4)模块mod_rewrite来重写IP限制部分的规则和条件。我将保留您的自定义“ 403禁止访问”,以便处理该状态码的其他情况。如果您在共享主机上,则默认情况下,大多数托管服务提供商通常会启用此模块。

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),并在标头中传达403 Forbidden错误。由于我的示例将所有页面重定向到/.wrongip.php的非白名单IP,最有可能甚至重定向到/.wrongip.php本身,因此我认为在您的特定情况下,[R]标志将导致HTTP重定向循环,在该循环中,它们将继续请求/.wrongip.php在这种情况下,您应该省略该[R]标志,这将导致Apache服务器执行内部重定向

如果没有该[R]标志,则客户端将不会知道此重定向正在进行(因此是internal),因此您仍然应该使用PHP/.wrongip.php文件的标题中模拟错误代码

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将两个值(行)合并到具有自定义值的单行中?

如何基于Angular js中的两个自定义过滤器过滤数据

如何在Swift中合并两个自定义类型数组并删除重复的自定义类型项?

如何在两个不同的keras层之间创建自定义(卷积)连接

我想在单个表视图中使用笔尖中的两个不同的自定义单元格。两个原型单元的高度不同

具有两个自定义形状按钮的WPF自定义控件

如何在Python中自定义对两个熊猫数据框列的排序?

如何在Inno Setup中将自定义页面上的单选控件分成两个不同的组?

我将如何比较自定义树集实现中的两个对象?

如何从具有两个不同绑定的自定义ListView获取所有信息?

一个自定义UITableViewCell在两个UIViewControllers的不同UITableView中

如何在Wordpress自定义帖子中不重复的情况下循环进入两个不同的DIVS

如何基于两个自定义对象删除列表中的重复项

如何区分具有相同自定义单元格的两个UITableView

如何在BigQuery旧版SQL中使用两个不同的自定义维度

如何比较自定义验证器中的两个控件?

两个不同的自定义查询 Wordpress 循环,带有单个分页

如何在 Inno Setup 中添加两个自定义页面?

在 youtube 页面中放置两个不同的滚动条以改进自定义 UI 体验

我正在尝试声明一个自定义组件以在(我的 ionic 应用程序的)两个不同页面中使用,但出现错误

导航控制器中的两个不同的自定义转换

如何在 C# 中合并两个自定义类型列表

如何在两个 React 自定义 Hook 之间拥有共同的状态?

如何区分自定义单元格中的两个文本字段?

如何使用两个表在 Laravel 中创建自定义注册?

如何在 PyQt5 中创建两个或多个颜色的自定义 QPushButton?

如何为两个不同的 Primefaces 组件使用自定义 CSS

如何在 SvelteKit 中添加自定义 404 页面和不同的错误页面(针对其他错误)?

如何使用 Java 8 合并两个不同类型的自定义对象列表