我创建了一个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>
答案 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]