问题包括我正确的404.php文件

时间:2014-08-01 19:36:45

标签: php

我有一个项目,我有一个管理小组。

我有一个网站文件夹,在这个文件夹里面,我有一个管理员和一个模板文件夹。

在“Admin”文件夹中,我有:

1个文件夹“新闻”

1个文件夹“类别”

1 index.php - >我有我的查询字符串

1个文件夹“包含”我有“home.php”,“header.php”以及“404.php”

在模板文件夹中,我有我的网页。

这是我在我的admin index.php文件中执行导航的查询字符串

$whitelist = array('inc/home.php', 'inc/404.php', 
            'news/index.php','news/news-create.php','categories/categories-edit.php',
            'categories/categories-create.php', 
            'index.php', 'inc/header.php','inc/footer.php');

if(empty($_GET['nav'])){
    require('inc/home.php');
}
elseif(in_array($_GET['nav'].'.php', $whitelist)){
    require($_GET['nav'].'.php');
}
else{
    require('inc/404.php');
}

但我遇到了问题。

如果我访问了一个不存在的网址,例如:htp:// localhost / website / admin / news / news

我想要包含我的admin /的404.php文件/包括foder,但我包含我的网站文件夹的404.php文件。

我不明白这是怎么回事!

但如果我访问了这个网址:htp://localhost/website/admin/dashboard.php?nav = errortesting,

这个网址也不存在,但是我得到了我的管理文件夹中正确的404.php文件。

似乎我的404.php文件只包含在我的“nav”变量中。

你明白为什么会发生这种情况吗?

我的网站文件夹中有一个.htaccess文件(但我只是用于网站页面,而不是用于管理页面):

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

2 个答案:

答案 0 :(得分:0)

您应该配置您的网络服务器(Apache,nginx,...)来自定义404错误。你这样做的方式只有在参数' nav'是空的。 404错误来自网络服务器,因为没有从给定的URL

找到php脚本/文件

答案 1 :(得分:0)

您应该使用.htaccess代码:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* ./

这会将每个没有文件或文件夹的请求重定向到index.php

直接重定向到404页面,将最后一行更改为:

RewriteRule .* ./inc/404.php