我希望我的用户仅尝试访问我的php文件,如果他们尝试访问要包含我的页面404文件的文件夹

我有我的查询字符串以包含我的页面,就像下面看到的那样在我的主页中,并且工作正常,我也包括我的页面.

但是发生了一些错误,我无法找到解决方法.

我将举一个例子来说明问题:我有一个文件夹“ teachers”,里面有两个pdf文档和一个页面“ documents.php”.
要访问此文档页面,请访问:“ htp:// localhost / website / teachers / documents”,它可以正常工作.

但是,如果我访问“ htp:// localhost / website / teachers /”,我将能够访问我的pdf文档和我的页面,如下图所示.

但我不希望这样,我希望如果某些用户尝试访问“ htp:// localhost / website / teachers /”,我想包含我的404文件(require_once(‘inc / 404.php’);)

我的查询字符串:

@$url = $_GET['url'];
$url = explode('/', $url);
$url[0] = ($url[0] == NULL ? 'index' : $url[0]);

if(file_exists('inc/'.$url[0].'.php')){
     require_once('inc/'.$url[0].'.php');
}
elseif(file_exists($url[0].'/'.$url[1].'/'.$url[2].'.php')){
     require_once($url[0].'/'.$url[1].'/'.$url[2].'.php');
}
elseif(@file_exists($url[0].'/'.$url[1].'.php')){
     require_once($url[0].'/'.$url[1].'.php');
}
else{
     require_once('inc/404.php');
}

您是否看到我做错了没有得到我想要的结果?

我的htaccess文件:

RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$index.php?url=$1

解决方法:

有一个更简单的解决方案.

将此行添加到您的.htaccess文件的开头:

Options -Indexes

这样,您将看不到文件夹内容.

编辑:htaccess规则解决方案(在网站文件夹中)

ErrorDocument 404 /website/inc/404.php

RewriteEngine On
RewriteBase /website/

RewriteRule ^teachers/$- [R=404,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$index.php?url=$1 [L]
上一篇:php-主要CodeIgniter应用子目录中CodeIgniter应用的Nginx重写配置


下一篇:php-保护目录免受直接URL访问