【问题标题】:Block all search queries except on .htaccess阻止除 .htaccess 之外的所有搜索查询
【发布时间】:2021-06-03 12:08:33
【问题描述】:

我目前正在一个 wordpress 网站上工作,其中我有一个特殊情况。我希望允许一个特定的搜索查询,同时拒绝所有其他查询。

例如:

  • www.example.com - 通过
  • www.example.com/page - 通过
  • www.example.com
  • www.example.com/?myQuery - 通过
  • www.example.com/?anyotherQuery - 404

现在,我已经尝试使用以下重写规则,但它也阻止了对其他页面的访问。

RewriteBase "/"
RewriteCond %{QUERY_STRING} ! myQuery
RewriteRule ^.* - [F]`

我是重写和 htaccess 方面的新手,所以需要帮助来实现这一点。

【问题讨论】:

  • “一个特定的搜索查询” - 你的意思是一个特定的“查询字符串”?还有任何 URL路径?
  • 如果您使用的是 WordPress,那么在 PHP 框架中使用搜索比在底层 Apache / htaccess 系统中使用搜索更有意义。
  • @MrWhite 是正确的。只有特定的查询“myQuery”应该在所有页面上传递,所有其他的应该是 404!
  • @Martin,实际上我必须通过 htaccess 阻止它以避免所有其他错误查询。
  • 你的第三个例子是什么意思?

标签: html wordpress apache .htaccess


【解决方案1】:

.htaccess 文件的顶部尝试以下操作, WordPress 前端控制器之前。

RewriteCond %{QUERY_STRING} .
RewriteCond %{QUERY_STRING} !=myQuery
RewriteRule ^ - [F]

上述状态...对于任何包含查询字符串(第一个条件)并且查询字符串不完全是myQuery(第二个条件)的URL以 403 Forbidden 响应(Apache 响应,而不是 WordPress)。

CondPattern 上的 = 前缀使其成为字典字符串比较(不是正则表达式),而 ! 前缀否定结果。

RewriteBase "/"
RewriteCond %{QUERY_STRING} ! myQuery
RewriteRule ^.* - [F]`

RewriteBase 指令在这里无关紧要。 !myQuery 之间的 空格 是错误的。但这可能会阻止查询字符串不包含 myQuery 的任何内容,包括根本没有查询字符串的情况。

【讨论】:

    猜你喜欢
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-29
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    相关资源
    最近更新 更多