【问题标题】:.htaccess redirect 403 error files to 404 error document.htaccess 将 403 错误文件重定向到 404 错误文件
【发布时间】:2015-08-22 23:10:56
【问题描述】:

我有一个名为 control 的文件夹,它包含在名为 project 的根项目文件夹中,因此 control 文件夹的 localhost 路径形式如下:http://localhost/project/control

control 文件夹中,我放置了一个.htaccess 文件,其中包含以下内容:

RewriteEngine On
deny from all

在项目根文件夹,即project 文件夹我有另一个包含主要代码的.htaccess 文件,包括这个404错误重定向代码:

RewriteCond %{REQUEST_FILENAME} !-f  
RewriteCond %{REQUEST_FILENAME} !-d  
RewriteRule ^  errordocs/404.php [L]

现在我想做的是,每当打开control 文件夹时遇到403 错误,它应该将其重写到相同的errordocs/404.php 页面。

【问题讨论】:

  • 你好,Sourabh。下一个不清楚的问题:) 如果 deny from all 然后在 root htaccess 中将 /control/* 重写为 erorr404 ?
  • 你的意思是这样做:^control/(.*)$ errordocs/404.php [L]
  • @splash58,我说的对吗?
  • 是的。或者,知道你的棘手条件:),我不是说领先 ^ 然后 /project /control 也可以工作control/(.*)$ errordocs/404.php [L]
  • 做到了这一点,但它已经重写了所有正在使用的网址:),所以我不能使用它

标签: php apache .htaccess mod-rewrite redirect


【解决方案1】:

您可以使用ErrorDocument 将状态码与输出页面匹配

ErrorDocument 404 errordocs/404.php
ErrorDocument 403 errordocs/404.php

【讨论】:

  • 我不想为403 显示空白页你建议我怎么做?
  • 写成ErrorDocument 404 /project/errordocs/404.php,我不想在这里硬编码/project。因为我的项目根文件夹名称是/project
  • 你能解释一下为什么你不想硬编码/project吗?
  • 这似乎是一个奇怪的问题。如果您不能信任您的用户正确配置他们的.htaccess,您如何相信他们正确实施errordocs/404.php?如果/project 是您项目的根目录,则.htaccess 应该在该文件夹中。
  • 项目根文件夹、错误文档和其他内容中的所有内容。错误文档 404 在不使用 ErrorDocument 的情况下使用重写规则动态工作,我被 403 卡住了。
【解决方案2】:

我能够解决我的问题,我试图在这里解释它,以便对其他人也有帮助,它对我来说很好。

在我的project/control/.htaccess 文件中我输入了代码:

RewriteEngine On
RewriteRule ^$   ../errordocs/404.php [L] 

因此,每当用户键入 url localhost/project/control/ 时,他将看到来自 errordocs 文件夹的自定义 404.php 文件,该文件是一个目录,因为我的目的是防止直接访问控制文件夹。我没有使用deny from all 而不是使用上述过程,这样我就可以使用自定义错误页面来处理 403 错误,这将独立于文档根路径。现在我的项目文件夹可以命名为用户希望的任何名称。

注意:此过程将返回 200 而不是实际的 403 错误。要返回 403 和 404,请使用以下代码:

403

RewriteEngine On
RewriteRule ^$  ../errordocs/404.php [L]
RewriteRule ^$ - [R=403,NC,L]

404

RewriteEngine On
RewriteRule ^$  ../errordocs/404.php [L]
RewriteRule ^$ - [R=404,NC,L]

【讨论】:

  • 嗯,这将返回 status=200 而不是 status=403 给用户。
  • @anubhava,是的,我认为这是唯一的问题,我认为这不是一个很大的问题,你说什么?
  • 好吧,基本上我不想让搜索引擎索引这个路径http://domain.com/project/control/,因为它包含控制器代码,这个功能是为了安全问题。我想让它不可见。现在这样好吗?我还在.htaccess 文件中添加了这个RewriteRule ^/ - [L,R=403] 以返回403 错误,这样可以吗?
  • 这是为了防止黑客访问该文件夹,我知道并不完全安全,对于好的搜索引擎,我们可以使用robots.txt
  • 写 RewriteRule ^ ../errordocs/404.php [L] - 我想 ^$ 只选择空 URI
猜你喜欢
  • 2019-04-25
  • 1970-01-01
  • 1970-01-01
  • 2018-05-02
  • 2015-06-26
  • 2016-03-13
  • 1970-01-01
  • 2011-07-07
  • 1970-01-01
相关资源
最近更新 更多