我们有一个通配符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”。

08-25 12:13