我的.htaccess文件阻止了404重定向问题

时间:2013-12-01 14:50:10

标签: file .htaccess redirect http-status-code-404

我的.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");
}

1 个答案:

答案 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();