【问题标题】:Apache Rewrite Numeric Arguments To RootApache 将数值参数重写为 Root
【发布时间】:2020-06-18 03:26:07
【问题描述】:

我们不断发现类似的请求:

https://www.example.com/?1537249139=

查询字符串参数中的数字似乎是随机时间戳。这花费了我们的预渲染预算,因此我们希望 301 将这些重定向回根目录。我试过这个:

   RewriteCond %{QUERY_STRING} ^([0-9]*)=$
   RewriteRule / [L,R=301]

但它不起作用。有什么想法吗?

【问题讨论】:

  • 您的 RewriteRule 错误,缺少模式或替换 URL。你需要在标志之前有两个“参数”,你只提供了一个。
  • 我不明白。只有一个参数,它从来没有值。只是等号。
  • 我不是在说URL参数,我是说你在RewriteRule之后写的东西
  • 实际上,如果您正在监视您的 http 服务器的错误日志文件,您可以很容易地发现实际问题。在这种情况下,您可以在此处找到特定的错误消息。 如果不监视该中心文件,您将无法操作生产系统!

标签: apache .htaccess mod-rewrite url-rewriting


【解决方案1】:
RewriteRule / [L,R=301]

这与示例网址不匹配。您缺少与请求的 URL 路径匹配的第一个参数 (Pattern):

RewriteRule 模式 替换 [标志]

您的示例 URL 仅适用于文档根目录 (/),因此需要在 .htaccess 中编写如下:

RewriteCond %{QUERY_STRING} ^\d+=$
RewriteRule ^$ / [R=301,L]

.htaccess 中,与RewriteRule 匹配的URL 路径模式 不包含斜杠前缀(这就是您原来的指令不匹配的原因)。

请注意,这是“重定向”,而不是问题标题中所述的“重写”。

但是,如果这些是完全无效的请求(甚至可能是由机器人发出的?),那么简单地返回 403 或 404 不是更可取吗?例如:

RewriteRule ^$ - [F]

RewriteRule ^$ - [R=404]

?

参考:
https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#rewriterule

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-10
    • 2015-04-27
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    • 1970-01-01
    • 2013-01-24
    相关资源
    最近更新 更多