【问题标题】:Forcing SSL and WWW using .htaccess for a subdomain对子域使用 .htaccess 强制 SSL 和 WWW
【发布时间】:2018-11-08 19:09:47
【问题描述】:

我在子域 beta.mydomain.com 上托管了 opencart 网站,并安装了 ssl cirtificate。

我想强制 https 和 www 。当有人键入 beta.example.com 时,应将他们带到 https://www.beta.example.com

我厌倦了关注 .htaccess 条目

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\.example.com\.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]
RewriteBase /

我不明白这里出了什么问题。提前致谢。

【问题讨论】:

  • 这个 .htaccess 在哪里?您能否也为您的子域显示VirtualHost 条目

标签: .htaccess ssl https


【解决方案1】:

好吧,您在示例中使用的域不是beta.example.com,而是example.com,您应该将其更改为您需要的域。比如:

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\.beta\.example\.com$ [NC]
RewriteRule ^(.*)$ https://www.beta.example.com/$1 [L,R=301]
RewriteBase /

RewriteBase 用于什么用途?

我个人喜欢使用以下流程:

  1. 重定向到 www
  2. 重定向到 https

类似:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301,NC]

RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

如果您还没有检查过,this GitHub Repository 有一些关于 .htaccess 的有用信息。

【讨论】:

  • 不工作。它去 webistes 页面未找到页面:(
  • 在这种情况下,您的域是什么?我希望您不要在不修改说明中的域的情况下进行复制粘贴。您必须将 example.com 更改为您的域名。
  • @maaz 如果您可以发布有关这部分的 .htaccess 文件的代码,这将使事情变得更容易。
  • RewriteCond %{HTTP_HOST} !^www\.beta\.example.com\.com$ [NC] - 您似乎复制了问题中的双 .com 错字。次要的一点,但 NC 标志应该从这个 negated 条件中删除。如果您将 www 和 HTTPS 重定向分开,您应该重定向到 HTTPS first,而不是相反。如果您计划实施 HSTS,则需要先重定向到 HTTPS(在同一主机名上)。
  • @MrWhite 我更正了这个错误,至于重定向我个人按特定顺序执行,因为有时 SSL 证书仅针对 www 域发出,所以如果我首先重定向到非 www 我'将得到一个非安全错误并停在那里。这就是为什么我先重定向到 www,然后再重定向到 https。如果证书涵盖两个版本,那将不是问题。
【解决方案2】:

最简单的方法是更新主目录中的 config.php 文件。

我面前没有它,但您想将您的 HTTP 和 HTTPS 网址更改为“https://www.beta.example.com”。

【讨论】:

    【解决方案3】:

    对于htaccess

    RewriteEngine On
    RewriteCond %{SERVER_PORT} !=443
    RewriteRule ^ https://www.yoursite.com%{REQUEST_URI} [NS,R,L]
    

    替代 htaccess 代码

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

    用于 php 重定向 打开 index.php 文件 找到

    <?php
    

    添加后

        if (substr($_SERVER['HTTP_HOST'], 0, 4) === 'www.') {
     header('Location: http'.(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on' ? 's':'').'://' . substr($_SERVER['HTTP_HOST'], 4).$_SERVER['REQUEST_URI']);
     exit;
    }
    

    【讨论】:

      猜你喜欢
      • 2014-01-20
      • 2018-12-22
      • 2023-03-27
      • 2010-10-08
      • 2016-09-25
      • 2013-01-19
      • 2015-05-07
      • 2012-07-30
      • 2015-07-18
      相关资源
      最近更新 更多