【问题标题】:Can't pass parameters to another redirect website无法将参数传递到另一个重定向网站
【发布时间】:2021-12-04 13:31:18
【问题描述】:

我想重定向到另一个网站,并传递参数。 示例:我访问我的网站:source.example/?code=12345 然后,我希望它重定向到target.example/?code=12345

我目前正在将它用于我的.htaccess 文件,因为我从其他帖子中发现,如果我查询某个参数,它也会被传递:

RewriteEngine On

RewriteCond %{QUERY_STRING} ^code=[NS]$
RewriteRule "www.google.com" /$1 [R=302,L]

此外,我尝试了许多不同的方法来查看这些堆栈问题:

但我无法让它运行:(

【问题讨论】:

  • 你说你“不能传递参数”,但你发布的指令不会做任何事情?

标签: apache .htaccess url mod-rewrite cpanel


【解决方案1】:

因为我从其他帖子中发现,如果我查询某个参数,它也会被传递

这不是真的。默认情况下会传递查询字符串 - 如果您希望在目标 URL 上使用相同的查询字符串,则无需执行任何额外操作。

RewriteCond %{QUERY_STRING} ^code=[NS]$
RewriteRule "www.google.com" /$1 [R=302,L]

由于多种原因,此代码与源 URL 不匹配:

  • "www.google.com" - RewriteRule 指令的第一个参数是匹配源 URL 路径(减去斜杠前缀)的正则表达式。在您的示例中,URL 路径是 empty
  • ^code=[NS]$ 匹配 code=Ncode=S - 这不是您示例的意图。 ([NS] 看起来像一个损坏的 RewriteRule 标志?!)
  • /$1 - 这是 substitition 字符串,即。您要重定向到的 URL。 ($1 反向引用总是空的,所以这是没有意义的。)

要从source.example/?code=<number> 重定向到https://target.example/?code=<number>,请尝试以下操作:

RewriteCond %{HTTP_HOST} ^source\.example [NC]
RewriteCond %{QUERY_STRING} ^code=\d+$
RewriteRule ^$ https://target.example/ [R=302,L]

这仅匹配code=1234 形式的查询字符串。不匹配code=code=1234&foo=bar等。

查询字符串默认通过。

如果 source.example 是唯一托管在当前位置的域,那么您可以删除明确检查请求的主机名的第一个条件

.htaccess 文件中指令的顺序很重要。像这样的外部重定向应该靠近顶部。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多