VPSに3つの異なるドメインとサブドメインを配置しようとしています。
それらを設定しましたが、何らかの理由で各サブドメインがexample.com
のルートディレクトリにある同じindex.htmlにリダイレクトされています
intranet.example.com
のスクリーンショット:
example.com
のスクリーンショット:
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>
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>
仮想ホストを正しく構成しましたか?
Example.comの443
仮想ホストは次のとおりです。
<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>
これは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]
コメントで述べたように、私はあなたが報告しているように見える偽のリダイレクトを見ることはなく、2つのURLは異なるコンテンツを返すように見えます(ただし、それらは「似ている」ように見えます)。それで、これは異なるindex.html
ドキュメントを表示するように見えますが、同じではありませんか?
現在の問題の原因ではありませんが、<VirtualHost *:80>
コンテナでのリダイレクトは不必要に複雑であり、.htaccess
でのwwwからwwwへのリダイレクトは正しくありません(URLパスを削除しています)。
例えば:
RewriteEngine on RewriteCond %{SERVER_NAME} =www.example.com [OR] RewriteCond %{SERVER_NAME} =example.com RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
このSERVER_NAME
コンテナー内の<VirtualHost>
を確認する必要はありません。 SERVER_NAME
は、チェックする2つの値のいずれかである必要があります。そうでない場合、そもそもコードのこの時点では決してありません。
また、 HSTS を実装する計画がない限り、二重リダイレクトを回避するために、標準のwwwサブドメイン(後で.htaccess
で行う)にリダイレクトすることもできます。
したがって、これは単一のmod_aliasリダイレクトに単純化できます。
Redirect 301 / https://www.example.com/
サブドメインについても繰り返します。
(Aside:理想的には、各ドメインの非標準の非wwwバージョンに個別の<VirtualHost *:443>
があり、標準への単純なリダイレクトを発行しますwwwバージョン。これには明らかにコードが含まれますが、別の方法として、既存の<VirtualHost *:443>
コンテナーでmod_rewriteリダイレクトを使用することもできます。これは、.htaccess
で行っていることに似ています。)
.htaccess
RewriteEngine On RewriteCond %{HTTP_Host} !^www\. RewriteRule ^(.*)$ https://www.%{HTTP_Host} [R=301,L]
これはremovesリクエストからURLパスを削除し、常にドキュメントルートにリダイレクトしますが、これは意図していないと確信しています。 (SEOにとっては悪いことです。また、なぜRewriteRule
patternでURLパスをキャプチャし、それで何もしません。 ?)
RewriteRule
substitutionに$1
後方参照を含める必要があります。次に例を示します。
RewriteRule (.*) https://www.%{HTTP_Host}/$1 [R=301,L]
ブラウザのキャッシュをクリアしたことを確認する必要があります。