【问题标题】:Improve htaccess rewrite for SSL, non WWW using subdirectories使用子目录改进 SSL 的 htaccess 重写,非 WWW
【发布时间】:2018-01-31 07:53:13
【问题描述】:

所有可能的域名写法都应该改成https和非www。即

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 让它工作了,但是这段代码有点乱,我很确定有一个更好/更干净的方法来实现我想要的。

有人可以帮我改进以下 .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 应为:https://example.com,子域的 URL 应为 https://sub.example.com

【问题讨论】:

    标签: .htaccess https url-rewriting subdirectory


    【解决方案1】:

    你可以使用这些规则

    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。
    猜你喜欢
    • 2014-11-24
    • 2018-09-11
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 2013-05-11
    • 2010-12-01
    • 1970-01-01
    • 2019-01-28
    相关资源
    最近更新 更多