包括请求的文件,重写网址,在PHP中管理404错误

时间:2019-07-14 23:55:15

标签: php .htaccess url-rewriting include http-status-code-404

请阅读全部内容。我知道时间很长,但我确实需要帮助。

我想做的是将请求的文件包含在“主容器”中,然后重写请求的url(如果不存在),显示带有htaccess的404错误页面,如ErrorDocument 404 /404.php < / p>

所以,我知道有很多关于这些事情的文章,但是无论我做什么,我都无法成功。总有一个问题。例如;

我试图那样使用.htaccess

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ /page_handler.php

因此每个请求都首先到达page_handler.php,它将带有$ page的请求页面变量传递给index.php,然后index.php使用它来填充页面。

 $page = $_SERVER['REQUEST_URI'];
if(empty($page) OR $page == '/') {
    $page= "main";
}
include "index.php";

这个问题是,我不能使用ErrorDocument 404 /404.php,因为无论请求什么页面,它都调用page_handler.php,因此页面被填充,没有404错误。

我尝试的第二种方法是使用.htaccess这样的

<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule ^(admin|user)($|/) - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?page=$1 [L,QSA]
</IfModule>

和index.php

global $pages;
    $pages = @$_GET["page"];

    $pages = explode("/", $pages);

并检查$ pages [0],[1]等以计算页面并包含该页面。有了这个,你不能使用

ErrorDocument 404 /404.php

所以我尝试检查文件是否存在

header("HTTP/1.0 404 Not Found");
echo "<div class='content-wrapper'>";
include('404.php');
echo "</div>";

但是它仅模拟404页面,它不会向机器人发送真正的404错误,当我使用它时,您可以调用类似www.example.com/articles/1/ 随便键入的页面>例如www.example.com/articles/1/1294ajgakshja1

它调用ID为1的文章,但最后一部分是什么?

因此,如您所见,我是一个菜鸟,是一个新手。不知道该怎么办。我尝试了很多事情,阅读了很多网页,尝试了比上述提到的更多的事情,但是无法解决我的问题。我需要有人来指引我正确的道路。正如我提到的,我只想用请求的文件填充主要内容区域,将URL重写为SEO友好,如果页面不存在,则将该页面404。谢谢

1 个答案:

答案 0 :(得分:0)

我可能不太了解您的问题。
我最好用这个:

.htaccess:

ErrorDocument 404 /404.php

404.php:

<?php
header("HTTP/2 404 Not Found"); // Or use HTTP/1.0 or HTTP 1.1
// Any other includes
echo "The requested URL ". parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH). " was not found on this server.";
// Any other includes
?>

在包含的情况下,请使用/目录中的正确路径(如果使用linux)

/home/username/public_html/include.php