我在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
有人可以帮助我吗?
非常感谢。
答案 0 :(得分:4)
这看起来像你正在使用isapi_rewrite v2,所以我会回答那个版本。 v3语法略有不同。
在第一行中,我认为www需要!
为负面预测。如图所示,它匹配www而不是not-www。
答案是捕获网址的各个部分,然后使用子匹配$ 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]
即使页面为https,上述规则也将始终重定向到http。如果您想保持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/whatever...
重写为www.abc.example.com/whatever...
。因此,如果您有单独的子域名,例如,为开发人员提供暂存或本地主机,或者说“购买”托管购物域,您可以使用“www”'或'这些'(注意localhost没有尾随点,只处理// localhost)。
RewriteCond Host: (?!www\.|staging\.|shop\.|localhost)(.*)
RewriteCond %HTTPS (on)|.*
RewriteRule (.*) http(?2s:)\://www.$1$3 [I,RP]