我正在运行一个网站,我正在尝试自己的slug机制。
这是我的.htaccess文件内容
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L,QSA]
</IfModule>
在我的index.php中,我有以下代码
$_REQUEST['action'] = trim($_SERVER['REQUEST_URI'],"/");
...
if (!empty( $_REQUEST['action'] )) {
$action = explode("/", $_REQUEST['action']);
$slug = $action[0];
$pageName = $slug.".php";
if (file_exists($pageName)) {
require_once $pageName; // 404 status code
}
else {
echo 'Your page is not found'; // 200 status code
}
} else {
require_once 'welcome.php';
}
现在它将如何运作
/school will be mapped on school.php
/mobile will be mapped on mobile.php
/about will be mapped on about.php
显然这项工作完全没问题,内容装得很好,但问题是HTTP status code
是404
另一方面,如果我随机输入一些东西就像
/some-thing-random
它显示这行echo 'Your page is not found';
有200状态代码(请注意some-thing-random.php不存在)
对我来说奇怪的是如下,我刚刚在.htaccess
文件中添加了以下行,现在它的工作正常,有200条消息
Options +FollowSymLinks -MultiViews
对于那些担心manually
设置标题的人:我没有。它不应该,所有类型的URL都会被index.php拦截,至少这是我对你的.htaccess文件的理解
一个更奇怪的是,可能会帮助你回答我的问题是让我们说如果url如下qazxsw poi和如果重命名文件qazxsw poi作为qazxsw poi然后只是执行以下
www.mysite.com/about
它工作正常
现在我的问题是究竟发生了什么?任何人都可以向我解释一下(还要注意我正在使用GoDaddy托管)
要发送404代码,必须在标题中指明。
header(“HTTP / 1.0 404 Not Found”);
更多关于about.php
的信息