【问题标题】:How to setup .htaccess to show 404 for unallowed urls?如何设置 .htaccess 以显示 404 不允许的网址?
【发布时间】:2011-10-29 10:32:08
【问题描述】:

我注意到在 Drupal 中,如果您将 .php 添加到任何页面的 url 栏,它会给您一个 404 消息;启用干净的网址。该页面显然是一个 .php,但 .htaccess 阻止了用户篡改 url 栏中的 url 扩展名。你怎么能用.htaccess 做到这一点。我目前省略了文件扩展名,但也想添加该功能。谢谢你。
此外,这个问题与 Drupal 无关。我只提到了 Drupal 作为例子。

【问题讨论】:

  • 我会改写:如何防止用户编写不存在的 URL?你知道答案。
  • @OZ_ 阅读问题正文通常有助于理解问题。
  • Drupal URL 不指向物理 PHP 文件,它们是重定向到处理请求的 index.php 的虚拟 URL。因此,将.php 添加到 URL 将给出 404,因为该 URL 根本不存在。
  • @Col。弹片这么聪明的主意!但是,preventing the user from being able to tamper with url extensions in the url bar 没有办法(来自问题主体)。用户可以在 URL 中写入任何他想要的内容。
  • 您能否更深入地解释一下。它如何将内容重定向到现有页面?这是常见的做法/典型的做事方式吗?

标签: php html .htaccess mod-rewrite


【解决方案1】:

仅仅因为一个文件包含 PHP 代码并不意味着它必须具有 .php 扩展名;当您通过 Internet 访问文件时更是如此。

当您请求 http://mysite.com/page 并且您使用像 Drupal 的 .htaccess 时,请求被转发到 index.php?q=page,然后 Drupal 将检查它的数据库以查找匹配 page 的路径。如果找到,它将显示该页面的内容,如果没有,它将(正确)给出 404。

如果您希望您的所有页面都可以通过 PHP 扩展访问,您可以在您的 .htaccess 文件中添加一个额外的规则,以从 PHP 文件实际上不存在的任何请求中删除 .php

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.php $1 [NC]

请记住,尽管这为您网站的访问者增加了零额外价值(实际上他们必须记住文件扩展名以及页面路径),并且它准确地暴露了您正在使用的服务器端技术所以潜在的攻击者会为他完成一些工作。

希望对您有所帮助。

【讨论】:

    【解决方案2】:

    您能否更深入地解释一下。它如何将内容重定向到现有页面?这是常见的做法/典型的做事方式吗?

    是的,这是一种非常普遍的做法,被大多数框架和 CMS 使用。

    原理很简单:你设置你的.htaccess,这样每个与真实文件或目录不匹配的请求都将被重定向到前端控制器,通常是应用程序根目录中的index.php。该前端控制器通过分析 URL 并调用必要的操作来处理请求。

    通过这种方式,您可以将重写规则最小化为一个,并且您可以提供自定义的 404 页面。

    【讨论】:

      【解决方案3】:

      我不知道 Drupal,但在通常的 php 应用程序中,每个请求都被路由到执行一些验证并在错误时抛出 404 的前端控制器。
      简单易懂

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-14
        • 2012-01-10
        • 2016-02-16
        • 2015-09-01
        • 1970-01-01
        相关资源
        最近更新 更多