【问题标题】:issue with my .htaccess file preventing 404 redirect我的 .htaccess 文件问题阻止 404 重定向
【发布时间】:2013-12-02 01:25:33
【问题描述】:

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

【问题讨论】:

  • @jacouh 标题不代表问题的状态,所以我回滚了它。对于 OP:我相信您可以随时回答自己的问题,因此我建议您编辑您的更新并将其放入答案中。您可以在一段时间后接受该答案。
  • @Sumurai8,好的。没关系。

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


【解决方案1】:

因为您在内部重写到实际存在的页面user.php,所以不会触发 ErrorDocument。

您可以通过测试数据库中是否存在该内容并重定向到 404 页面来使用您正在执行的技术:

header( "HTTP/1.1 302 Moved Temporary" );
header( "Location: /404.php" );
exit();

这将重定向到404页面,并且/404.php将显示在url栏中。


另一种处理方式是,通过检测该事物是否存在于数据库中并包含 404 页面。如果您的 404.php 中有 404 标头,则不需要标头。客户端会在url栏中看到example.com/blah,内部会改写为user.php?u=blah

header( "HTTP/1.1 404 Not Found" );
require_once( "path/to/404.php" );
exit();

【讨论】:

    猜你喜欢
    • 2011-12-01
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    相关资源
    最近更新 更多