【问题标题】:Display 404 page when trying to view a profile for a nonexistent user尝试查看不存在用户的个人资料时显示 404 页面
【发布时间】:2012-06-08 02:09:41
【问题描述】:

在我的站点中,用户个人资料的网址为 mysite.com/user/username。我真正想要做的 url 应该是 mysite.com/username。 我已经完成了将这些代码行添加到 htaccess 文件中

RewriteRule ^([a-zA-Z0-9_-]+)$ user.php?uname=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ user.php?uname=$1

现在我可以通过 mysite.com/username 联系用户。但错误是,现在 404 文件不起作用。如果我键入不存在的 url,例如 myste.com/dasdfsf,它不会得到 404 文档,因为它正在查看所有数字和字母(以查找用户名)并给我 我为无效用户名创建的空白页面。如果该用户不存在,我希望它显示 404 页面。

【问题讨论】:

    标签: php .htaccess


    【解决方案1】:

    为什么显示无效用户名的空白页?改为显示您的 404 页面。

    【讨论】:

    • 是的:if ( ! $user_exists) header('HTTP/1.0 404 Not Found'); include 'error_404.php';
    【解决方案2】:

    重定向:

    RewriteRule ^user/([a-zA-Z0-9_-]+)$ http://example.com/$1 [R=301,L]
    RewriteRule ^([a-zA-Z0-9_-]+)$ user.php?uname=$1 [L] #use the L option to stop processing
    RewriteRule ^([a-zA-Z0-9_-]+)/$ user.php?uname=$1 [L]
    

    要显示 404,您需要设置 404 页面并将逻辑添加到您的 user.php 以阅读它。

    <?php
        if(!userExist()){
            header('Status: 404 Not Found');
            echo file_get_contents('404.php');
            exit;//do this if there is code below that assumes this is a valid user
        }
    ?>
    

    【讨论】:

    • 我会避免重定向,发送一个 404 标头 302,加上让用户丢失地址栏中的位置,这是有问题的和糟糕的用户体验。
    • 其实!这会发送 404 状态并设置 Location HTTP 标头。爬虫将获得他们想要的 404 状态,并且浏览器很可能遵循 Location 标头。但是,正如你所说,这并不理想,这就是为什么我给了他 2 个解决方案。 404并回显404页面或404并发送404页面的位置。
    • 我经常听到人们问如何进行“404 重定向”,只是真的试图阻止它。当您可以简单地从您打算重定向到的页面加载内容时,您为什么要想要重定向?
    • 我自己不使用重定向。我只是喜欢给人们选择。但是,为了帮助您消除它,我将编辑我的答案。 :)
    • header('位置:'oops.html');为我工作。但它会重定向而不是获取内容
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-26
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多