.htaccess 使用子目录改进非WWW SSL的htaccess重写

.htaccess 使用子目录改进非WWW SSL的htaccess重写,.htaccess,https,url-rewriting,subdirectory,.htaccess,Https,Url Rewriting,Subdirectory,所有可能的域名书写方式都应该重写为https和非www.i.e example.com => https://example.com www.example.com => https://example.com http://example.com => https://example.com http://www.example.com => https://example.com https://www.example.com => https://ex

所有可能的域名书写方式都应该重写为https和非www.i.e

example.com => https://example.com

www.example.com => https://example.com

http://example.com => https://example.com

http://www.example.com => https://example.com

https://www.example.com => https://example.com
这些规则也适用于所有子域(https和非www)

主站点应重写到名为“main”的文件夹中。目前我有一个子域名,应该被重写到一个名为“sub”的文件夹中

因此,我通过.htaccess实现了它,但这段代码有点混乱,我很确定有更好/更干净的方法来实现我想要的

有人能帮我改进一下吗

RewriteEngine on 


RewriteCond %{HTTP_HOST} ^www\.
RewriteCond http%1://%{HTTP_HOST} ^(https?://)(www\.)?(.+)$
RewriteRule ^ %1%3%{REQUEST_URI} [R,L]

RewriteCond %{HTTP_HOST} ^(www.)?example.com$ 
RewriteCond %{REQUEST_URI} !^/main/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /sub/$1 

RewriteCond %{HTTP_HOST} ^(www.)?example.com$ 
RewriteRule ^(/)?$ /sub/$1


# Force https
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

主域的URL应该是:子域应该是

您可以使用这些规则

RewriteEngine on

#redirect main site to https non www
RewriteCond %{HTTP_HOST} ^www\. [OR]
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^(?:www\.)?(mainsite\.com)$
RewriteRule ^ https://%1%{REQUEST_URI} [NE,L,R]
#rewrite mainsite to /mainsite folder
RewriteCond %{HTTP_HOST} ^(www\.)?mainsite\.com$
RewriteCond %{REQUEST_URI} !^/mainsitefolder
RewriteRule ^ /mainsitefolder%{REQUEST_URI} [L]

#redirect subdomain to https and subfolder

RewriteCond %{HTTP_HOST} ^sub.domain.com$ [OR]
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^(?:www\.)?(sub\.domain\.com)
RewriteRule ^ https://sub.domain.com%{REQUEST_URI} [NE,L,R]
#rewrite subdomain to subfolder
RewriteCond %{HTTP_HOST} ^sub.domain.com$
RewriteCond %{REQUEST_URI} !^/subdomainfolder
RewriteRule ^ /subdomainfolder%{REQUEST_URI} [L]

谢谢你的回答!您的解决方案在主域中运行良好,但在子域中运行失败。当我输入
https://www.sub.example.com
www不会被删除,当我进入
www.sub.example.com
时,www不会被删除,也不会被重定向到https。