为404页创建重定向

时间:2018-07-24 16:39:45

标签: php .htaccess

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

ErrorDocument 404 /404.php

还尝试删除斜杠,添加完整的URL等,

无论我做什么,无论我写的是什么URL,我都会得到index.php UI。这是事实,这不是将我重定向到domain.com/index.php或“ /”。 URL仍然存在,但用户界面是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>

3 个答案:

答案 0 :(得分:3)

根据我对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]

(重写块的最后一行)

答案 1 :(得分:1)

您可以使用position:fixed指令执行此操作。删除以FallbackResource行开头的所有代码,并使用以下单行:

RewriteBase /

对于任何404事件,该事件都会回退到FallbackResource /404.php

答案 2 :(得分:-1)

如果符合要求,您可以在下面看到此代码作为示例:

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

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