htaccess 将域重定向到 https,带参数的子域重定向到 http

htaccess redirect domain to https, subdomain with parameter to http

我正在尝试这样做:

为我的主域强制使用 https。

http 或 https://www.domain.com -> https://domain.com
http 或 https://domain.com -> https://domain.com

这是域的 htaccess 编码

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

这工作正常

但不适用于子域

我想要的结果是

https://www.domain.com/index.php?username=abc => http://abc.domain.com
http://www.domain.com/index.php?username=abc => http://abc.domain.com

并且总是删除 www 和 https 到 http。

但不知道如何为子域编写 htaccess 代码

如果请求 index.php,这将首先检查您是否需要根据查询字符串中的用户名参数重定向到子域。然后,当重写到该子域时,它将复制整个查询字符串,但在保留所有其他参数的同时从中省略用户名参数。

第二部分将检查您的主域是否包含 www,然后在其上强制执行 https(如果我们尚未决定重定向到子域)。

RewriteEngine On

#match either the www subdomain or no subdomain
  RewriteCond %{HTTP_HOST} ^(?:www.)?(?:domain\.com)$
#which request index.php
  RewriteCond %{REQUEST_URI}  ^/index\.php
#and contain a username paramater
  RewriteCond %{QUERY_STRING} ^(.*?)(?:^|&)username=([^&]+)(.*?)$
#then rewrite them to username.domain.com without the username parameter
  RewriteRule ^ http://%2.domain.com%{REQUEST_URI}?%1%3 [R,QSA,L]

#match either the www subdomain or no subdomain
  RewriteCond %{HTTP_HOST} ^(?:www.)?(?:domain\.com)$
#which was requested without https
  RewriteCond %{HTTPS} off
#then redirect to https
  RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]