【问题标题】:htaccess redirect rule for multiple URL params多个 URL 参数的 htaccess 重定向规则
【发布时间】:2020-12-10 09:37:32
【问题描述】:

我需要使用 htaccess 获得重定向

来自http://example.com/go/zaym?source=`PARAM1`&keyword=`PARAM2` 但如果没有 URL 参数,我还需要使用空参数进行重定向

收件人:另一个域http://example2.com/sub_id=PARAM`&sub_id2=PARAM2

所以我需要将值 source 移动到 sub_id 并将值 keyword 移动到 sub_id2

我正在尝试,但它不起作用:

RewriteCond %{QUERY_STRING} ^source=([^&]+)&keyword=([^&]+)$
RewriteRule ^go/zaym http://example2.com/sub_id=%1&sub_id2=%2 [R,L]

【问题讨论】:

  • 当您之前的问题 (stackoverflow.com/questions/65224714) 被关闭时,这并不意味着请再次发布相同的内容而不进行任何重大更改。本网站不是代码编写服务,总是希望您自己先尝试一下。所以向我们展示这一点,并给我们一个适当的问题描述。
  • man...阅读有关使用 htacces 重定向的其他问题。我不能再添加任何东西,因为无论如何它是 500 错误
  • 根据htaccess.madewithlove.be?share=0db5acd9-b2cc-4c9d-9fb5-ede582f4…,这应该将你重定向到http://example2.com/sub_id=%60PARAM1%60PARAM26sub_id2=PARAM2?source=%60PARAM1%60&keyword=PARAM2 - 你真的想重定向到一个路径 sub_id=PARAM&sub_id2=PARAM2,或者这实际上应该是查询字符串?
  • “没有源代码和关键字” - 如果您不指定新的查询字符串,则会通过原始查询字符串。这就是为什么我问你,你是否真的希望 sub_id=%60PARAM1%60PARAM26sub_id2=PARAM2 成为新 URL 的 path 的一部分。根据您在 Ravinder 的回答下的评论,您 ...但您没有回答这个简单的问题,而是忽略了它。而且您的问题描述并没有反映您最初真正想要的内容。
  • 好的,但现在你明白了。你有决定吗?

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


【解决方案1】:

编辑(更通用的方式):根据 OP 的评论,使用更通用的方式可以尝试遵循,其中没有 keywordsource 字符串的硬编码,然后尝试关注。

只有查询字符串条件检查:

RewriteEngine ON
RewriteCond %{QUERY_STRING} ^[\w-]+=(.*)(?!=&)$ [NC]
RewriteRule ^(.*)$ http://example2.com%{REQUEST_URI}?sub_id=%1 [NE,L]

RewriteCond %{QUERY_STRING} ^[\w-]+=([^&]*)&[\w-]+=(.*)$ [NC]
RewriteRule ^(.*)$ http://example2.com%{REQUEST_URI}?sub_id=%1&sub_id2=%2 [NE,L]

RewriteCond %{QUERY_STRING} ^$
RewriteCond %{REQUEST_URI} ^/go/zaym/?$ [NC]
RewriteRule ^ http://example2.com%{REQUEST_URI} [L]

带URI+查询字符串条件:

RewriteEngine ON
RewriteCond %{QUERY_STRING} ^[\w-]+=(.*)(?!=&)$ [NC]
RewriteCond %{REQUEST_URI} ^/go/zaym/?$ [NC]
RewriteRule ^(.*)$ http://example2.com%{REQUEST_URI}?sub_id=%1 [NE,L]

RewriteCond %{REQUEST_URI} ^/go/zaym/?$ [NC]
RewriteCond %{QUERY_STRING} ^[\w-]+=([^&]*)&[\w-]+=(.*)$ [NC]
RewriteRule ^(.*)$ http://example2.com%{REQUEST_URI}?sub_id=%1&sub_id2=%2 [NE,L]
 
RewriteCond %{QUERY_STRING} ^$
RewriteCond %{REQUEST_URI} ^/go/zaym/?$ [NC]
RewriteRule ^ http://example2.com%{REQUEST_URI} [L]

【讨论】:

  • 这是个好主意,但如果我不知道某些参数怎么办?它可能类似于 mydomain.com/go/zaym?keyword=2&SOMETHINGIDONTKNOW=1111,但我需要重定向到 example2.com?sub_id=2 没有我不知道的参数。或者只是 mydomain.com?something=dontknow 到 example2.com
  • @АртёмДанилов,请检查我更通用的答案一次,让我知道,我希望这次我们应该是好的 :)
  • 我使用您的第二个代码:“使用 URI + 查询字符串条件:”当我输入 mydomain.ru/go/zaym/keyword=3&a=1 我得到 example2.com/?sub_id=
  • @АртёмДанилов,好的,我添加了(?!=&),请您现在检查一次,然后告诉我。
  • 好的,效果很好。非常感谢您的宝贵时间
猜你喜欢
  • 2023-03-29
  • 2022-01-07
  • 2015-07-14
  • 1970-01-01
  • 2017-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多