J'essaie d'avoir 3 domaines et sous-domaines différents sur mon VPS:
Je les ai configurés, mais pour une raison quelconque, chaque sous-domaine est redirigé vers le même index.html qui se trouve dans le répertoire racine de example.com
La capture d'écran de intranet.example.com
:
La capture d'écran de example.com
:
Voici l'hôte virtuel pour intranet.example.com
:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName intranet.example.com
ServerAlias www.intranet.example.com
DocumentRoot "/var/www/intranet/"
<Directory "/var/www/intranet/">
Options Indexes FollowSymLinks
AllowOverride all
Require all granted
</Directory>
ErrorLog ${Apache_LOG_DIR}/error.log
CustomLog ${Apache_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.intranet.example.com [OR]
RewriteCond %{SERVER_NAME} =intranet.example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
Voici l'hôte virtuel pour example.com
:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example
<Directory /var/www/example>
Options Indexes FollowSymLinks
AllowOverride all
Require all granted
</Directory>
ErrorLog ${Apache_LOG_DIR}/error.log
CustomLog ${Apache_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.example.com [OR]
RewriteCond %{SERVER_NAME} =example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
Ai-je correctement configuré mes hôtes virtuels?
Voici les hôtes virtuels 443
pour example.com:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example
<Directory /var/www/example>
Options Indexes FollowSymLinks
AllowOverride all
Require all granted
</Directory>
ErrorLog ${Apache_LOG_DIR}/error.log
CustomLog ${Apache_LOG_DIR}/access.log combined
Include /etc/letsencrypt/options-ssl-Apache.conf
SSLCertificateFile /etc/letsencrypt/live/www.example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem
</VirtualHost>
</IfModule>
Ceci est pour intranet.example.com:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName intranet.example.com
ServerAlias www.intranet.example.com
DocumentRoot "/var/www/intranet/"
<Directory "/var/www/intranet/">
Options Indexes FollowSymLinks
AllowOverride all
Require all granted
</Directory>
ErrorLog ${Apache_LOG_DIR}/error.log
CustomLog ${Apache_LOG_DIR}/access.log combined
Include /etc/letsencrypt/options-ssl-Apache.conf
SSLCertificateFile /etc/letsencrypt/live/www.intranet.example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.intranet.lsgob.us/privkey.pem
</VirtualHost>
</IfModule>
.htaccess
RewriteEngine On
RewriteCond %{HTTP_Host} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_Host} [R=301,L]
Comme mentionné dans les commentaires, je ne vois aucune redirection parasite que vous semblez signaler et les deux URL semblent renvoyer un contenu différent (bien qu'elles "se ressemblent"). Donc, cela semble montrer différents index.html
documents, pas les mêmes?
Ce n'est pas la cause du problème actuel, mais votre redirection dans vos conteneurs <VirtualHost *:80>
est inutilement complexe et la redirection non www vers www dans .htaccess
est incorrecte (vous supprimez le chemin URL).
Par exemple:
RewriteEngine on RewriteCond %{SERVER_NAME} =www.example.com [OR] RewriteCond %{SERVER_NAME} =example.com RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
Il n'est pas nécessaire de vérifier le SERVER_NAME
dans ce conteneur <VirtualHost>
. Le SERVER_NAME
doit déjà être l'une des deux valeurs que vous recherchez, sinon il ne se trouverait jamais à ce stade du code.
Et, sauf si vous avez l'intention d'implémenter HSTS , vous pouvez également rediriger vers le sous-domaine canonique www (que vous ferez plus tard dans .htaccess
) afin d'éviter une double redirection .
Donc, cela pourrait être simplifié à une seule redirection mod_alias:
Redirect 301 / https://www.example.com/
Répétez l'opération pour vos sous-domaines.
( De plus: Idéalement, vous devriez également avoir un <VirtualHost *:443>
séparé pour la version non canonique non www de chaque domaine qui émet une simple redirection vers la version canonique www. Bien que cela implique certes plus de code, vous pouvez également utiliser une redirection mod_rewrite dans vos conteneurs <VirtualHost *:443>
existants, similaire à ce que vous faites dans .htaccess
.)
.htaccess
RewriteEngine On RewriteCond %{HTTP_Host} !^www\. RewriteRule ^(.*)$ https://www.%{HTTP_Host} [R=301,L]
Ceci supprime le chemin de l'URL de la demande et redirige toujours vers la racine du document, ce qui, j'en suis sûr, n'est pas l'intention. (Ce serait mauvais pour le référencement et pourquoi capturer le chemin de l'URL dans le motif RewriteRule
et ne rien faire avec ?)
Vous devez inclure le backreference $1
dans la substitution RewriteRule
, par exemple:
RewriteRule (.*) https://www.%{HTTP_Host}/$1 [R=301,L]
Vous devrez vous assurer que vous avez effacé le cache de votre navigateur.