是否可以用具有单页ssl证书的域重写子域?
我想做的事:
将subdomain.domain.com重写为domain.com/index.php&page=子域
到目前为止,我得到了什么:
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"
所以它仍然将其作为子域传递,而不是重定向它。
如果我使用完整的域作为重写规则,它是有效的,但它也会将标题栏中的url更改为domain.com/index.php?user=子域,而不是保留url:
RewriteRule ^(.*)$ https://domain.com/index.php?user=%1&req=$1 [L,QSA]
那么,如何将子域重写为domain.com/index.php呢?user=subdomain,同时保留subdomain.domain.com,并且仍然可以使用一页ssl证书?
不可能让Web服务器在子域(例如subdomain.domain.com
)上提供网页,但保留仅在domain.com
上有效的单页SSL证书。从技术上讲,这是可能的,但这样做会使浏览器警告用户SSL证书无效,并在访问者中对您的网站产生不信任。现在有几个选项可以解决这个问题:
- 获取通配符SSL证书
- 获取多使用者替代名称SSL证书(旧版/移动浏览器可能会警告用户此类证书)
- 制作一个新的apache虚拟主机配置,并让apache提供不同的单页SSL证书(
subdomain.domain.com
需要获得该证书)
这里最好的选择是3,因为你可以在几个网站上获得免费的一页SSL证书,并将其用于你的目的(例如StartSSL、LetsCrypt)。设置一个新的虚拟主机配置并不困难,因为你可以复制粘贴网站现有虚拟主机配置的大部分(你只需要更改一些东西(例如SSL证书、SSL密钥、SSL链、网站名称…))。