Query string 如何使用ISAPI重写重定向查询字符串?

Query string 如何使用ISAPI重写重定向查询字符串?,query-string,isapi-rewrite,Query String,Isapi Rewrite,我在httpd.ini文件中使用以下行将访问example.com的用户重定向到www.example.com: RewriteCond Host: (?:www\.)?example.com RewriteRule (.*) http\://www.example.com [RP,L] 我想知道,如果用户在没有www的情况下访问我的网站,如何重定向查询字符串,例如: 我的用户访问权限: example.com?a=1&b=2 example.com/a/b 我想重定向到: www.

我在httpd.ini文件中使用以下行将访问example.com的用户重定向到www.example.com:

RewriteCond Host: (?:www\.)?example.com
RewriteRule (.*) http\://www.example.com [RP,L]
我想知道,如果用户在没有www的情况下访问我的网站,如何重定向查询字符串,例如:

我的用户访问权限:

example.com?a=1&b=2
example.com/a/b
我想重定向到:

www.example.com?a=1&b=2
www.example.com/a/b
有人能帮我吗


非常感谢。

看起来您正在使用isapi_rewrite v2,所以我将为该版本负责。v3语法略有不同

在第一行,我认为它需要一个!对于www的负面展望,如图所示,它匹配www而不是not-www

答案包括捕获url片段,然后在重写时使用子匹配$1、$2等

RewriteCond Host: (?!www\.)example.com
RewriteRule (.*) http\://www.example.com$1 [I,RP]
您可以通过捕获而不是example.com,使其更通用于任何域,以便轻松复制到其他网站。它成为第一个捕获$1,而url的其余部分现在是$2

RewriteCond Host: (?!www\.)(.*)
RewriteRule (.*) http\://www.$1$2 [I,RP]
上述规则将始终重定向到http,即使页面是https。如果您想保持http或https不变,例如。,https://example.com/a?b=1 到https://www.example.com/a?b=1,然后查找https标志,并替换s。这很难用文字来描述:它查找HTTPS服务器变量值“on”,如果它是“on”,则保留它。现在这是第二次捕获,如果是其他捕获,则不保留它。然后,在规则中,?2正在测试是否有第二次捕获。如果是,则添加“s”,否则为冒号,则在冒号后不添加任何内容。在这个集合中,url的其余部分现在是第三个子字符串

RewriteCond Host: (?!www\.)(.*)
RewriteCond %HTTPS (on)|.*
RewriteRule (.*) http(?2s:)\://www.$1$3 [I,RP]
终于差不多完成了!,这并不仅仅是子域。因为.*而不是'example.com',它将重写abc.example.com/which。。。请访问www.abc.example.com/which。。。。因此,如果您有子域要单独处理,例如,开发人员的staging或localhost,或者对于托管的购物域说“shop”,您可以使用“www”或“note localhost没有尾随点,仅处理//localhost

RewriteCond Host: (?!www\.|staging\.|shop\.|localhost)(.*)
RewriteCond %HTTPS (on)|.*
RewriteRule (.*) http(?2s:)\://www.$1$3 [I,RP]

看起来您正在使用isapi_rewrite v2,所以我将为该版本负责。v3语法略有不同

在第一行,我认为它需要一个!对于www的负面展望,如图所示,它匹配www而不是not-www

答案包括捕获url片段,然后在重写时使用子匹配$1、$2等

RewriteCond Host: (?!www\.)example.com
RewriteRule (.*) http\://www.example.com$1 [I,RP]
您可以通过捕获而不是example.com,使其更通用于任何域,以便轻松复制到其他网站。它成为第一个捕获$1,而url的其余部分现在是$2

RewriteCond Host: (?!www\.)(.*)
RewriteRule (.*) http\://www.$1$2 [I,RP]
上述规则将始终重定向到http,即使页面是https。如果您想保持http或https不变,例如。,https://example.com/a?b=1 到https://www.example.com/a?b=1,然后查找https标志,并替换s。这很难用文字来描述:它查找HTTPS服务器变量值“on”,如果它是“on”,则保留它。现在这是第二次捕获,如果是其他捕获,则不保留它。然后,在规则中,?2正在测试是否有第二次捕获。如果是,则添加“s”,否则为冒号,则在冒号后不添加任何内容。在这个集合中,url的其余部分现在是第三个子字符串

RewriteCond Host: (?!www\.)(.*)
RewriteCond %HTTPS (on)|.*
RewriteRule (.*) http(?2s:)\://www.$1$3 [I,RP]
终于差不多完成了!,这并不仅仅是子域。因为.*而不是'example.com',它将重写abc.example.com/which。。。请访问www.abc.example.com/which。。。。因此,如果您有子域要单独处理,例如,开发人员的staging或localhost,或者对于托管的购物域说“shop”,您可以使用“www”或“note localhost没有尾随点,仅处理//localhost

RewriteCond Host: (?!www\.|staging\.|shop\.|localhost)(.*)
RewriteCond %HTTPS (on)|.*
RewriteRule (.*) http(?2s:)\://www.$1$3 [I,RP]