【问题标题】:how to write this 404 rule in .htaccess如何在 .htaccess 中编写此 404 规则
【发布时间】:2011-11-28 19:59:33
【问题描述】:

我有一个自定义 CMS。它工作得很好,除了一件事。我想知道如何最好地实现 404 功能。该站点应仅具有以下 url 类型

index.php?upn=something

gallery.php?groupId=2

在 index.php 或 gallery.php 之后附加到 url 的任何目录都应该抛出 404。如果指定 upn 时在数据库中找不到内容,我也想抛出 404。我意识到我可以在 php.ini 中抛出标题。但我说我会尝试更深入地了解这个问题。因此,如果您有任何信息或指示,我将不胜感激。

【问题讨论】:

  • “如果在数据库中找不到内容,我也想抛出 404”不能通过 apache conf
  • 因为要查看数据库内容,所以必须通过PHP发送状态码!
  • 谢谢大家,我了解关于 php.ini 的内容。我真的很喜欢 apache 的第一部分,只是一些关于我需要在 php.ini 中寻找的任何东西的指针。谢谢。

标签: php apache .htaccess url http-status-code-404


【解决方案1】:

您必须在 php 代码中返回 404,但您可以在 htaccess 中像这样设置 404 处理程序:

ErrorDocument 404 /errors/notfound.html

【讨论】:

    【解决方案2】:

    我喜欢通过我的 PHP 代码以编程方式执行此操作。你可以编写一些简单的路由组件,试图找到你想要的。今天你只是路由到操作(index.php?upn=gallery.php?groupId=),但在未来的某一天你可能会添加一个新的,你应该改变你的.htaccess,这更难。如果您在应用层中完成所有操作,则可以更简单地进行更改。

    将此代码粘贴到项目根目录的 .htaccess 文件中,并将每个请求路由到 router.php。收到请求后,您可以决定要执行的操作。

    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^(.*)$ router.php?url=$1 [QSA,L]
    </IfModule>
    

    希望对你有帮助。

    【讨论】:

    • 感谢这个我真的很喜欢这个路由器的想法,因为我一直在做类似的操作来构建数据库查询。很好的答案,谢谢一百万。
    • 不客气。看看 CakePHP 路由器。它就是这样工作的,查看代码可能很有用。也许你可以使用别的东西。此外,可能还有一些用于路由的库
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    • 2023-04-08
    • 2021-04-10
    • 1970-01-01
    相关资源
    最近更新 更多