我们有一个通配符SSL证书,该证书应可在给定域的任何子域上工作。
因此,在此服务器中,我们具有以下文件结构:
/ home / DOMAIN / public_html / subdomainx
/ home / DOMAIN / public_html / subdomainy
等等...
现在,已安装证书,但是当您通过https访问任何子域时(例如:hxxps://subdomainx.domain.com),它指向
/home/DOMAIN/public_html/index.php
当您通过https访问子域时,我们需要
hxxps://subdomainx.domain.com
它指向与http等效的目录:
/ home / DOMAIN / public_html / subdomainx
我们的提供者告诉我们这是不可能的,当前的行为是正确的,并且我们应该做一些htaccess来实现。
我已经尝试了一些方法,包括此解决方案,这似乎正是我所需要的:Advice on Configuring .HTaccess file to Redirect HTTP Subdomain to HTTPS Equivalent
但是无法使其正常工作。
有小费吗?
谢谢。
最佳答案
您不希望重写规则中的[R]标志或目标中的主机名。您想重写URI,以便在它前面添加一个“ subdomainx”。类似于以下内容:
RewriteEngine On
# We don't want the main domain or www
RewriteCond %{HTTP_HOST} ^((?!www).*)\.domain.com$ [NC]
# Make sure that if we rewrite, the destination actually exists (to prevent loops and properly return 404's)
RewriteCond %{DOCUMENT_ROOT}/%1%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/%1%{REQUEST_URI} -d
# rewrite
RewriteRule ^(.*)$ /%1/$1 [L]
请注意,必须进行
%{DOCUMENT_ROOT}/%1%{REQUEST_URI}
检查,以便在不泄露信息的情况下返回正确的404。这样一来,当您请求http://test.domain.com/badfile.html时,404消息将显示未找到“ /badfile.html”,而不是未找到“ /test/badfile.html”。