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

时间:2014-08-18 18:37:35

标签: php .htaccess mod-rewrite include

我的查询字符串包含我的网页,如下所示,我的主页工作正常,我的网页很好。

但是发生了一些错误,我找不到如何解决这个问题。

我会尝试用一个例子来表达我的意思:我有一个文件夹“老师”里面有两个pdf文件和一个页面“documents.php”。 为了访问这个文档页面,我正在访问:“htp:// localhost / website / teachers / documents”,它运行正常。

但如果我访问“htp:// localhost / website / teachers /”,我可以访问我的pdf文档和我的页面,如下图所示。

enter image description here

但我不想要这个,我希望如果有些用户尝试访问“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

1 个答案:

答案 0 :(得分:4)

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

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

Options -Indexes

这样,您就无法看到文件夹内容。


编辑:htaccess规则解决方案(位于website文件夹中)

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]