请阅读全部内容。我知道时间很长,但我确实需要帮助。
我想做的是将请求的文件包含在“主容器”中,然后重写请求的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。谢谢
答案 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