【问题标题】:Apache Redirect Using %{QUERY_STRING} To Match A String AnywhereApache 重定向使用 %{QUERY_STRING} 在任何地方匹配字符串
【发布时间】:2013-01-08 23:13:48
【问题描述】:

我希望使用 %{QUERY_STRING} 进行 Apache 重定向,但它根本不起作用。

我想重定向任何在 URL 中任何位置都有字符串的网页查询。比如:

http://www.domain.com/328kadf83/dkad83kd/test83283/

如上所示,字符串将是“test”。

我试过了,但它似乎不起作用:

RewriteEngine On
RewriteCond %{QUERY_STRING} test
RewriteRule (.*) http://www.other_domain.com/page.html [R=301,L]

在这种情况下我做错了什么?主要的是 - 重定向需要匹配 URL 中出现字符串“test”的任何位置 - 然后它将重定向到特定的网页。

我在这里看到的其他问题专门针对目录或页面名称后带有变量的问题。

谢谢!

【问题讨论】:

  • 嗯 - 想知道是否应该使用 %{REQUEST_URI} 代替。刚刚测试过,它可能有效。多试几次。
  • 您的示例中没有查询字符串,因此没有任何内容符合 %{QUERY_STRING} 条件。

标签: apache mod-rewrite query-string


【解决方案1】:

应该是这样的:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI}  /test    [NC]
RewriteRule .*  http://www.other_domain.com/page.html [R=301,L]

【讨论】:

  • /test 中的斜线假定 test 总是出现在斜线之后,这在 OP 的示例中就是这样做的,但是如果短语“......在 URL 中的任何位置都有一个字符串”的意图" 真正的意思是任何地方,应该省略斜线。
  • @David Ravetti 当然,这是正确的问题。但是,我回答的目的是指出 QUERY_STRING 不是正确的条件,因为没有查询,而不是真正如何实现正则表达式。那只是一个例子。无论如何感谢您的评论。
【解决方案2】:

你应该可以在 RewriteRule 中简单地匹配它,如下所示:

RewriteRule .*test.* http://www.other_domain.com/page.html [R=301,L]

【讨论】:

    猜你喜欢
    • 2021-03-31
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    相关资源
    最近更新 更多