所以我的.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?
答案 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
{
...
}