自定义404页面并将用户发送给它

时间:2014-06-01 01:01:28

标签: php .htaccess http-status-code-404

所以我的.htaccess文件看起来像这样

<IfModule mod_rewrite.c>
Options +FollowSymLinks -    MultiViews
RewriteEngine on

ErrorDocument 404 404.php

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^/]*)$ $1.php

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)$ profile.php?username=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/([^/]*)$ profile.php?username=$1&page=$2 [L]
</IfModule>

但是当我转到127.0.0.1/random时它实际上转到127.0.0.1/profile.php?username=random这是可以理解的,这就是为什么我在profile.php上有一段代码来生成一个如果用户不存在则出现404错误

if ($User == NULL) { header("HTTP/1.0 404 Not Found"); }

但是它仍会加载配置文件而不会转到404错误。我尝试过标题('Location:index');然后它重定向到索引

我缺少什么来生成404?

2 个答案:

答案 0 :(得分:0)

此响应包含有用的信息https://stackoverflow.com/a/437705/1231563它基本上表明,一旦服务器开始处理您的代码,它将不会显示服务器默认的404页面。虽然它会将响应代码设置为404(对用户来说基本上是不可见的)。但是,您的.htaccess中有404错误转到404.php,所以只需使用

header('Location: /404.php');

指向您已设置的404 php页面。

答案 1 :(得分:0)

要显示404页面而无需重定向到www.example.com/404.php:

if ($User == NULL) 
{ 
    //this will set the 404 header
    header("HTTP/1.0 404 Not Found");

    //this will load the 404 page
    include '/404.html';

}
else 
{
    ...
}
相关问题