Php 为404页创建重新定向

Php 为404页创建重新定向,php,.htaccess,Php,.htaccess,我创建了一个404.php页面,并在.htaccess文件中添加了以下内容 ErrorDocument 404 /404.php 还尝试删除斜杠、添加完整URL等 无论我做什么,不管我在URL中写了什么,我都会得到index.php用户界面。事情是这样的,它没有将我重新定向到domain.com/index.php或“/”。URL仍然存在,但UI是index.php内容 我在下面添加我的re direct,以防您看到有冲突的内容 <IfModule mod_rewrite.c>

我创建了一个404.php页面,并在.htaccess文件中添加了以下内容

ErrorDocument 404 /404.php
还尝试删除斜杠、添加完整URL等

无论我做什么,不管我在URL中写了什么,我都会得到index.php用户界面。事情是这样的,它没有将我重新定向到domain.com/index.php或“/”。URL仍然存在,但UI是index.php内容

我在下面添加我的re direct,以防您看到有冲突的内容

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{HTTP_HOST} !^www.example.com$ [NC]
    RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]

    RewriteCond %{SERVER_PORT} !^443$
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>

重新启动发动机
重写cond%{HTTP_HOST}^www.example.com$[NC]
重写规则^(.*)$https://www.example.com/$1[L,R=301]
重写cond%{SERVER\u PORT}^443$
重写规则^(.*)$https://%{HTTP_HOST}%{REQUEST_URI}[L,R=301]
重写基/
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/index.php[L]

如果符合您的要求,您可以将以下代码作为示例:

ErrorDocument 404 http://example.com/404/

RewriteCond %{REQUEST_URI} ^/404/$
RewriteRule ^(.*)$ /404.php [L]

根据我对mod_重写的了解,最后4行是这样说的

如果请求文件名既不是文件也不是目录

重定向到index.php

我相信这就是正在发生的事情

应用程序中物理路径上不可用的所有路由都将转到
index.php

在应用程序中需要一些404机制。如果您正在使用某个框架,它通常会抛出一个异常,如“RouteNotFound”,然后错误处理程序会重定向到404页面,您也可以执行类似的操作,并从应用程序内部重定向到404.php

if($should_be_an_error) {  
 header("Location: 404.php");
} 
(多年没有使用过类似的东西,但应该是类似的东西)

或删除 `

`

但是你的其他路线可能会停止工作

编辑:

因为您想重定向到
404.php
而不是
index.php
(从注释中获取),所以代码应该改为

RewriteRule . /404.php [L]

(重写块的最后一行)

您可以使用
FallbackResource
指令执行此操作。删除以
RewriteBase/
行开头的所有代码,并使用这一行:

FallbackResource /404.php

对于任何404事件,这将返回到
/404.php

出于某种原因,这对我不起作用。我的css和js文件不加载。它把我猜的路弄乱了。另外还有一个关于缺少
的奇怪控制台错误修复了它。你的回答让我的缪斯醒悟了,哈哈,正如你所说,如果请求的url不是文件或目录,请转到..index.php实际上,也许你可以帮我做一些与此相关的其他事情。现在它成功地显示了404.php,鉴于我在我的域中键入了一些乱码,我如何将URL重新写入example/404.php而不是gibberish.php?然后尝试删除[L]并添加[R],它应该从我所知道的重定向到404.php!这就是我想要的!谢谢你,伙计。我将用另一个htaccess相关的问题来回答另一个问题,但与此无关。如果你想帮我查一下的话,真奇怪。Apache永远不会返回502,除非你有一个代理设置。一个普通的主机Gator linux主机帐户。很难猜测。检查这个官方文件:这都是非常标准的,我有另一个线程,有人在帮我删除.php fie扩展,他有一个不同的方式发送到404。我喜欢他的方法,除了主页现在也要变成404。但其他一切都起作用。
FallbackResource /404.php