我的.htaccess文件中包含以下内容,
ErrorDocument 404 /404.php
RewriteEngine on
ErrorDocument 404 /404.php
# Redirect Writeback
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)$ /user.php?u=$1 [L]
# Redirect Rule
RewriteCond %{THE_REQUEST} \?u=([^&\ ]+)($|\ )
RewriteRule ^ /%1? [L,R=301]
ErrorDocument 404 /404.php
如你所见,我正在尝试重定向,如果找不到页面,但mod_rewrite阻止它工作,所以我把它放在多个地方,看它是否有所作为,但它没有。如何修复404重定向并仍然让其他rewriteruile正常工作?要清除,如果您转到jnetscripts.com/multimedia
,它实际上指向文件jnetscripts.com/user?u=multime
。
更新: 好的我使用以下代码在我的user.php文件中解决了这个问题,希望这可以帮助任何有同样问题的人。
$numrows = mysqli_num_rows($user_query);
if ($numrows < 1) {
header("location: /notfound.php");
}
答案 0 :(得分:0)
因为您在内部重写了实际存在的页面user.php
,所以不会触发ErrorDocument。
您可以通过测试数据库中是否存在该内容并使用以下命令重定向到404页面来使用您正在执行的技术:
header( "HTTP/1.1 302 Moved Temporary" );
header( "Location: /404.php" );
exit();
这将重定向到404页面,/404.php
将显示在网址栏中。
另一种处理方式是,通过检测数据库中是否存在该内容并包含404页面。如果404.php
中有404标题,则不需要标题。客户端会在网址栏中看到example.com/blah
,其内部会重写为user.php?u=blah
。
header( "HTTP/1.1 404 Not Found" );
require_once( "path/to/404.php" );
exit();