【问题标题】:Only Allow POST Requests and Deny all other REQUEST_METHOD using .htaccess仅允许 POST 请求并使用 .htaccess 拒绝所有其他 REQUEST_METHOD
【发布时间】:2012-09-18 08:21:27
【问题描述】:

我有一些电子邮件 PHP 脚本,我不希望用户通过 GET 来查看,但我使用它作为电子邮件发送,如果有人知道它,则使用 wufoo 的 webHook,所以它使用 POST 所以我只是希望允许 POST 请求,否则 403 或 404 我该怎么做?

我尝试了一些关于 SO 的答案并浏览了 apache web 服务器的文档,我找到的最佳答案是:

 RewriteEngine On
 RewriteCond %{REQUEST_METHOD} !=GET
 RewriteRule ^.*$ /path/to

但我想这应该写在我有 PHP 脚本的目录中,我只想在根目录中使用一个 .htaccess。

文件夹结构:

      public_html (would want to use this folders .htaccess only)
      -- email 
         -- mail.php (ONLY POST)

我知道我们可以直接在mail.php 中使用 REQUEST_METHOD,但我不想那样做,这实际上与脚本无关。

谁能提供一些帮助。

【问题讨论】:

  • 在 PHP 中做这一切怎么样。如果存在任何 GET 字符串,将页面重定向到 404?更容易执行并且不太可能破坏其他脚本..
  • 但是假设有 100 页,我不应该去 100 页,这样做对吗?我需要一个可以管理所有这些的集中文件,这就是提出这个问题的原因..
  • 我通过在任何需要 POST 的页面/脚本中抛出一个我称之为 PostMethodNotAllowed 的自定义异常来做到这一点。此异常被捕获,并且 HTTP 错误标头(例如 403)可以在该异常处理程序中设置以及用户友好的消息。

标签: php .htaccess web-applications http-post httpserver


【解决方案1】:

这是一个非常相似的问题:
https://serverfault.com/questions/270950/only-allow-get-request-with-htaccess 只需创建适当的 .htaccess 文件并将其放在“电子邮件”目录中即可。

您也可以直接在 PHP 中执行此操作。

【讨论】:

  • 是的,罗伯特你是正确的,但我不想要子目录特定的 htaccess 文件,我也不想在我的代码中提供这种信息。这就是问题
  • 我猜你无权访问服务器上的虚拟主机(可能是共享主机?)
  • 是的,我不太了解,是的,我正在使用共享主机上的控制面板,000webhost.com
  • 如果你不这样做,我会为你已经拥有的 REQUEST_URI 添加额外的 RewriteCond。
  • 好的,罗伯特。谢谢。你能指导我一些适合我要求的材料吗?我有一个子目录,其中有 php 文件,只允许发布请求,否则它应该显示错误页面.. \
猜你喜欢
  • 2016-02-09
  • 2013-09-21
  • 2013-10-12
  • 2011-07-02
  • 2014-09-03
  • 1970-01-01
  • 2012-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多