【问题标题】:How to prevent subdomains from redirecting to https - htaccess?如何防止子域重定向到 https - htaccess?
【发布时间】:2017-04-23 15:40:38
【问题描述】:

我正在尝试解决如何将所有 http 实例重定向到 https://,但不包括子域。

RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^(www\.)?example.co [NC]
RewriteRule (.*) https://example.co/$1 [L,R=301,QSA]

例如,domain.example.co 应该保持原样,而不是重定向到https://

example.coexample.co/sub/sub 应重定向到 https://

我已尝试更改 RewriteRule:

RewriteRule ^$ https://example.co/$1 [R,L]

这会使子域保持原样,但对 example.co 下的子目录没有影响 - 即 example.co/sub/sub。

如何从 http 重定向到 https 但排除所有子域?

注意

我还有一个重写规则,它将子域指向它们的目录而不更改 URL:

RewriteCond %{HTTP_HOST} ^(.*)\.example\.co [NC]
RewriteRule ^(.*)/?$ http://example.co/%1/$1 [P]

sub.example.co 将显示example.co/sub,但 URL 不会改变

【问题讨论】:

    标签: apache .htaccess redirect mod-rewrite url-rewriting


    【解决方案1】:

    你可以试试这个:

    RewriteEngine On 
    RewriteCond %{SERVER_PORT} 80 
    RewriteCond %{HTTP_HOST} ^(.+\.)?domain\.com$
    RewriteRule ^(.*)$ https://%1domain.com/$1 [R,L]
    

    或者这个:

    RewriteEngine On 
    RewriteCond %{SERVER_PORT} 80 
    RewriteCond %{HTTP_HOST} ^(www\.)?sub\.domain\.com$
    RewriteRule ^(.*)$ https://sub.domain.com/$1 [R,L]
    

    注意:sub 替换为子域,domain 替换为域名

    享受它;-)

    【讨论】:

    • 嘿,感谢您的回复,但这仅适用于sub.domain.com,对吗?我怎样才能让它适用于所有子域
    • 谢谢,但是 sub.domain.com 只是被重定向到 domain.com/sub 所以最后是 https。也许这与我拥有的其他重写规则有关(检查编辑的版本)但我不太确定
    • 试试这个代码:Options +FollowSymlinks -MultiViews RewriteEngine On RewriteCond %{SERVER_PORT} =80 RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    • 感谢您的回复!但是,子域仍被重定向到 example.com/subdomain 而不是保持为 subdomain.example.com - 这似乎在没有提供的代码的情况下工作,但是 https 在域上不起作用
    • 子域文件夹中有.htaccess 文件吗? (public_html//.htaccess) 因为您拥有的代码在各个站点都经过测试。但肯定文件夹中的.htaccess文件中的这段代码有一个子域。同样,如果您还没有收到答复。您可以告诉您正在使用的系统(CMS),以便我可以帮助您更多。试试这个代码:RewriteCond %{HTTPS} off RewriteCond %{SERVER_PORT} !=443 RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,NE,R=301]
    【解决方案2】:

    试试下面我假设你没有使用附加到主机的 www。

    RewriteCond %{HTTPS} !=on
    RewriteCond %{HTTP_HOST} ^example.co [NC]
    RewriteRule ^(.*)$ https://example.co/$1 [L,R=301,QSA]
    
    RewriteCond %{HTTP_HOST} ^(.*)\.example\.co [NC]
    RewriteRule ^(.*)/?$ http://example.co/%1/$1 [P]
    ProxyPassReverse / http://example.co/
    

    【讨论】:

    • 感谢您的回答,但这似乎将所有子域重定向到example.co/subdomain,因此只是在末尾添加了一个 https。子域应保持原样(另请参阅问题详细信息末尾的注意
    • 我认为这条规则正常工作,但你必须确保你的其他规则正常工作,因为有时在使用代理规则时它会在它不能正常工作时重定向。你可以在这里查看htaccess.mwl.be
    • 如果我删除 http 到 https 重写规则,那么它似乎可以正常工作,因为 subdomain.example.co 保持原样而没有被重定向
    • 谢谢,但由于某种原因这会导致内部服务器错误
    猜你喜欢
    • 2018-07-14
    • 2014-03-10
    • 1970-01-01
    • 1970-01-01
    • 2012-06-03
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多