限制对错误页面的直接访问

Эџa*_*мaи 6 .htaccess mod-rewrite

我正在使用.htaccess显示错误的自定义HTML页面(401,404,500 ...等).我想限制直接访问包含html页面的errors文件夹.在errors文件夹的.htaccess文件中,我有以下内容:

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain\.com
RewriteRule \.(html|htm)$ - [F] 
Run Code Online (Sandbox Code Playgroud)

这似乎没有用,我得到:

a 500 Internal Server Error error was encountered while trying to use an 
ErrorDocument to handle the request.
Run Code Online (Sandbox Code Playgroud)

我必须对.htaccess文件进行哪些更改才能使其正常工作.我也想知道如果我把error文件夹放在public_html文件夹之外它是否会起作用?

Boo*_*eus 5

这是你应该放在.htaccess中的内容(在你的public_html中)

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^(www\.)?mydomain\.com
RewriteRule \.(html|htm)$ - [F]
Run Code Online (Sandbox Code Playgroud)

如果有效,请告诉我


Эџa*_*мaи 1

在 .htaccess 文件中,将所有错误重定向到一个 php 文件

ErrorDocument 403 /errors.php
ErrorDocument 404 /errors.php
ErrorDocument 500 /errors.php
Run Code Online (Sandbox Code Playgroud)

在 error.php 中使用 $_SERVER['REDIRECT_STATUS'] 和 if else 语句来检测错误并显示自定义消息

if($_SERVER['REDIRECT_STATUS'] == 403)
{
    die("Forbidden");
}
else if($_SERVER['REDIRECT_STATUS'] == 404)
{
    die("NOT FOUND");
}
else if($_SERVER['REDIRECT_STATUS'] == 500)
{
    die("Server Error");
}
else if($_SERVER['REDIRECT_STATUS'] == 200)
{
 // user is trying to directly access the errors page, redirect to index.php
 header("Location: index.php");
}
else
{
    // all other error codes
}
Run Code Online (Sandbox Code Playgroud)

这是HTTP 状态代码的列表。为每个要检测的错误编写一个 else if 语句。未检测到的错误将落在 else 块中

  • 如果直接访问错误页面,则可能根本不会设置“$_SERVER['REDIRECT_STATUS']” - 它似乎取决于服务器。(在这种情况下,您的“else”块不仅会捕获“所有其他错误代码”,还会捕获直接访问。) (2认同)