Apache 将具有querystring的URL重定向到具有相同querystring的新URL

Apache 将具有querystring的URL重定向到具有相同querystring的新URL,apache,.htaccess,Apache,.htaccess,我当前在.htaccess文件中有以下内容,用于将所有请求重定向到站点的SSL版本: RewriteEngine On RewriteCond %{HTTP:X-Forwarded-SSL} !on RewriteRule ^(.*) https://www.mydomain.com$1 [R=301,nc] 现在,我想将调用重定向到我当前的根URL-,只有当它有一个查询字符串附加到一个具有相同查询字符串的新URL时。例如: https://www.mydomain.com/?foo=bar已

我当前在
.htaccess
文件中有以下内容,用于将所有请求重定向到站点的SSL版本:

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-SSL} !on
RewriteRule ^(.*) https://www.mydomain.com$1 [R=301,nc]
现在,我想将调用重定向到我当前的根URL-,只有当它有一个查询字符串附加到一个具有相同查询字符串的新URL时。例如:

https://www.mydomain.com/?foo=bar
已重定向到:

https://www.mydomain.com/new_mapping/?foo=bar

而没有查询字符串的请求继续转到
https://www.mydomain.com/


提前感谢您的帮助。

使用
RewriteCond
将非空查询字符串与
+
匹配,并使用
[QSA]
重写它

RewriteEngine On
# If the querystring has at least 1 character
RewriteCond %{QUERY_STRING} ^.+
# Rewrite requests to the root 
RewriteRule ^/?$ new_mapping [L,QSA]
如果要实际重定向浏览器以显示新URL,请使用
[R=301]
。从技术上讲,
[QSA]
是不必要的,因为查询字符串将自动追加用于重定向

RewriteRule ^/?$ new_mapping [L,R=301,QSA]

使用
RewriteCond
将非空查询字符串与
+
匹配,并使用
[QSA]
重写它

RewriteEngine On
# If the querystring has at least 1 character
RewriteCond %{QUERY_STRING} ^.+
# Rewrite requests to the root 
RewriteRule ^/?$ new_mapping [L,QSA]
如果要实际重定向浏览器以显示新URL,请使用
[R=301]
。从技术上讲,
[QSA]
是不必要的,因为查询字符串将自动追加用于重定向

RewriteRule ^/?$ new_mapping [L,R=301,QSA]

这似乎没什么用。我是否应该将其放置在与我当前的
重写规则相关的某个位置?@AbidA它应该放置在SSL重定向之后。我还将把它改为“^/?$”,不过这不是必需的。要进行调试,请删除RewriteCond并验证根URL规则是否匹配,然后重新添加RewriteCond。现在我收到一个400错误的请求。除了将querystring应用于根URL之外,一切似乎都很正常。哦,所以我添加了完整的URL
https://www.mydomain.com/new_mapping
这很有效。这似乎没有什么作用。我是否应该将其放置在与我当前的
重写规则相关的某个位置?@AbidA它应该放置在SSL重定向之后。我还将把它改为“^/?$”,不过这不是必需的。要进行调试,请删除RewriteCond并验证根URL规则是否匹配,然后重新添加RewriteCond。现在我收到一个400错误的请求。除了将querystring应用于根URL之外,一切似乎都很正常。哦,所以我添加了完整的URL
https://www.mydomain.com/new_mapping
这就行了。