重写子域而不破坏单页ssl

时间:2016-03-22 22:02:11

标签: php apache .htaccess mod-rewrite ssl

是否可以使用具有单页ssl证书的域重写子域?

我想做什么:

  

将subdomain.domain.com重写为domain.com/index.php&page=subdomain

到目前为止我得到了什么:

   RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com [NC]
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule ^(.*)$ /index.php?user=%1&req=$1 [L,QSA]

这给了我一个糟糕的SSL证书,因为我没有子域证书。 在php中的$ _SERVER上使用var_dump会返回以下内容:

["SCRIPT_URI"]=> string(24) "https://subdomain.domain.com/" 
["HTTPS"]=> string(2) "on"  
["SSL_TLS_SNI"]=> string(15) "subdomain.domain.com"  
["SSL_SERVER_S_DN_CN"]=> string(14) "www.domain.com"

所以它仍然将它作为子域传递而不是重定向它。

如果我使用完整域作为重写规则,它可以工作,但它也会将标题栏中的网址转到domain.com/index.php?user=subdomain,而不是保留网址:

RewriteRule ^(.*)$ https://domain.com/index.php?user=%1&req=$1 [L,QSA]

那么如何在保留subdomain.domain.com的同时将子域重写到domain.com/index.php?user=subdomain并仍然可以使用单页ssl证书呢?

1 个答案:

答案 0 :(得分:2)

无法让网络服务器在子域(例如subdomain.domain.com)上提供网页,但保留仅在domain.com上有效的单页SSL证书。从技术上讲,它是可能的,但这样做会使浏览器警告用户无效的SSL证书,并在访问者中对您的网站产生不信任。现在有几种方法可以解决这个问题:

  1. 获取通配符SSL证书
  2. 获取多个主题备用名称SSL证书(旧版/移动浏览器可能会警告用户此类证书)
  3. 制作新的apache虚拟主机配置,让apache提供不同的单页SSL证书(您需要获取subdomain.domain.com
  4. 这里最好的选择是3,因为您可以在多个网站上免费获得一页SSL证书并将其用于您的目的(例如StartSSL,LetsEncrypt)。设置新的虚拟主机配置并不困难,因为您可以复制网站现有虚拟主机配置的大部分内容(您只需要更改一些内容(例如SSL证书,SSL密钥,SSL链,网站名称...))。