使用 htaccess 重定向参数后的任何内容 - 正则表达式

Using htaccess to redirect anything after a parameter - regex

我希望将以下 URL(s) 重定向到同一个 URL,只是没有 ?

例如:

https://www.example.com/this-is-static?numbersletterssymbols

https://www.example.com/this-is-static

"numbersletterssymbols" 可以是任何东西

我希望这是一个 301,使用 htaccess (apache)

我遇到了以下情况,但是变量似乎在括号中

RewriteCond %{QUERY_STRING} ^product=(.*)$
RewriteRule ^test.php$ %1/? [R=301,L]

如有任何见解,我们将不胜感激

要从 any URL 中删除查询字符串(any 查询字符串),您可以使用 mod_rewrite,靠近 .htaccess 文件的顶部:

RewriteEngine On

RewriteCond %{QUERY_STRING} .
RewriteRule ^ %{REQUEST_URI} [QSD,R=301,L]

条件RewriteCond 指令)只是断言存在一个至少包含 1 个字符的查询字符串(由正则表达式 . 确定 -一个点)。

QSD(查询字符串丢弃)标志从重定向响应中删除原始查询字符串。 QSD 标志需要 Apache 2.4(您很可能正在使用)。在您的示例中,早期版本的 Apache 使用的方法是将 ? 附加到 susbstitution 字符串(本质上是一个 empty 查询字符串).

请注意,您应该首先使用 302(临时)重定向进行测试,以避免潜在的缓存问题。


however, the variable seems to be in parentheses

正则表达式中的括号只是创建了一个“捕获组”,稍后可以通过反向引用对其进行引用。例如。在您的示例中,product URL 参数的值在 RewriteRule substitution 字符串中使用 %1 反向引用按顺序引用重定向到URL参数的值。这与您尝试做的非常不同,可以说是一个安全问题。例如。它会将 /test.php?product=https://malicious.com 的请求重定向到 https://malicious.com/,允许潜在的黑客通过您的站点中继流量。


UPDATE: is it possible to make this work only for when the URL begins with "this-is-static" (for example)

是的,RewriteRule 模式(第一个参数)匹配 URL-路径,减去斜杠前缀。例如:

RewriteCond %{QUERY_STRING} .
RewriteRule ^this-is-static %{REQUEST_URI} [QSD,R=301,L]

匹配 /this-is-static.

开头的所有 URL