使用 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
我希望将以下 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
.