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