php-为404页创建重定向

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

ErrorDocument 404 /404.php

还可以删除斜线,添加完整的URL等,

无论我做什么,无论我在URL中写什么内容,我都会得到index.php UI.这是事实,这不是将我重定向到domain.com/index.php或“ /”. URL仍然存在,但是UI是index.php的内容

我在下面添加了我的重定向,以防您发现其中存在冲突

<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>

解决方法:

根据我对mod_rewrite的了解,最后4行在说

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

重定向到index.php.

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

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

您的应用程序中将需要一些404机制.如果使用的是框架,通常会引发类似“ RouteNotFound”的异常,然后将错误处理程序重定向到404页面,您也可以执行类似的操作,并将其从应用程序内重定向到404.php.

if($should_be_an_error) {  
 header("Location: 404.php");
} 

(多年来未使用过类似方法,但应该类似)

或删除
`

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

`

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

编辑:

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

RewriteRule . /404.php [L]

(重写块的最后一行)

上一篇:php-Apache-使用.htaccess重写尾随扩展


下一篇:PHP-使用htaccess清理URL会破坏我的CSS