Ich besitze den example.tld
.
Ich möchte SSL und https für root-domain
und alle seine subdomains
erzwingen.
Ich habe den folgenden Code in der .htaccess
-Datei der Root-Domain verwendet:
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_Host} !^www\.example\.tld$ [NC]
RewriteRule ^(.*)$ https://www.example.tld/$1 [L,R=301]
Es sieht gut aus für Root-Domain.
Aber für Subdomains wie blog.example.tld
habe ich verschiedene Vorschläge verwendet, wie zum Beispiel:
RewriteCond %{HTTP_Host} ^blog\.example.\tld$ [NC]
RewriteRule ^ https://www.%{HTTP_Host}%{REQUEST_URI} [R=301,L,NE]
Aber keiner von ihnen funktioniert ordnungsgemäß und sie leiten zu ssl www version von root-domain
weiter, anstatt zu ssl www version von subdomain
.
Was soll ich machen?
Endlich habe ich das Problem gefunden.
Problem wurde durch Hosteinstellungen verursacht.
Aufgrund einiger Probleme musste ich die Subdomain im Host als independent domain
definieren. Dies wirft Probleme mit Redirects
auf. Denn anstelle der Unterdomäne hat die Hauptdomäne auf Redirection commands
geantwortet.
Um dieses Problem zu lösen, habe ich die Subdomain auf einen anderen Host übertragen. Daher wurde Redirection commands
für die Subdomain von einem neuen Host mit Subdomain beantwortet.
In dieser neuen Situation erzwingt der folgende einfache Befehl ssl and www for subdomain
:
RewriteEngine On
RewriteCond %{HTTP_Host} !^www\.sub.example\.tld$ [NC]
RewriteRule ^ https://www.%{HTTP_Host}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_Host}%{REQUEST_URI} [R=301,L]
Ich hoffe, diese Erfahrung wird für andere nützlich sein.
Keiner von ihnen funktioniert jedoch ordnungsgemäß, und sie leiten zur SSL-WWW-Version der Stammdomäne weiter, anstatt zur SSL-WWW-Version der Unterdomäne.
(Ich gehe davon aus, dass alle Ihre Subdomains demselben Bereich des Dateisystems zugeordnet sind.)
Es hört sich so an, als hätten Sie die Anweisungen in die falsche Reihenfolge gebracht. Wenn Sie die Subdomain-Umleitung nach der Root-Domain-Umleitung platziert haben, wird sie niemals verarbeitet, und die Root-Domain-Umleitung erfasst alle Subdomain-Anforderungen und leitet sie weiter die Subdomain zurück zur Root-Domain, da die Direktive RewriteCond
prüft, ob die angeforderte Domain nicht www.example.tld
- this ist passt auch zur Subdomain.
Wenn Sie jedoch die www-Unterdomäne immer erzwingen möchten (auch für Ihre Unterdomänen ), können Ihre Direktiven in einer einzigen Regel "vereinfacht" werden . Zum Beispiel:
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_Host} !^www\.
RewriteCond %{HTTP_Host} ^(?:www\.)?(.+)\.?$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L]
Dies entspricht einer Anforderung, die entweder HTTP oder ist und www.
nicht startet und zu HTTPS umleitet, wobei das Präfix www
(falls notwendig). Die Anweisung 3rd RewriteCond
ist erforderlich, um den angeforderten Hostnamen abzüglich eines www.
-Präfixes (falls vorhanden) zu erfassen. Der %1
in der Ersetzung ist ein Rückverweis auf den Hostnamen, abzüglich eines www.
-Präfixes.
Dies betrifft natürlich alle Domains auf dem Konto (wenn Sie mehr als eine haben).
PDATE: Ich habe gerade Ihre Antwort gesehen, bin mir also nicht sicher, ob dies jetzt relevant ist oder nicht?