次のコードを使用して、サブドメインのすべてのhttpリクエストをhttpsにリダイレクトします。
<VirtualHost *:80>
ServerName subdomain.example.com
Redirect 302 / https://subdomain.example.com
</VirtualHost>
今私の問題は、すべてのサブドメインに対してどのようにそれを行うかです。
たとえば、http:subdomain1.example.comはhttps:subdomain1.example.comに移動し、http:subdomain2.example.comはhttps:subdomain2.example.comに移動する必要があります
すべてのサブドメインに対して1つの仮想ホストを作成せずに、すべてのサブドメインに対してそれを行うにはどうすればよいですか?
更新
RedirectMatchは正規表現を使用していることがわかりました。正規表現を使用してそれを行う方法を知っている人はいますか?
これをサーバーの.conf
ファイルに追加できます。
<VirtualHost *:80>
ServerName subdomain.example.com
ServerAlias *.example.com
RewriteEngine On
RewriteCond %{HTTP_Host} ^(.+)\.example\.com$
RewriteRule ^(.*)$ https://%1.example.com$1 [R=302,L]
</VirtualHost>
ServerAliasは、仮想ホストがワイルドカードとして機能することを許可します。その後、ホストヘッダーからサブドメインを抽出し、httpsへの書き換えに含めることができます。
.confファイルへのより簡単なユニバーサル変更は次のとおりです。
<VirtualHost *:80>
#...whatever you already have set up...
RewriteEngine On
RewriteCond %{HTTP_Host} ^(.*)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]
</VirtualHost>
RewriteHTTPToHTTPS のApache Wikiエントリが述べているように、
Mod_rewriteを使用してこれを行うことは、推奨される動作ではありません。 RedirectSSL を参照してください
HTTPからHTTPSへの強制リダイレクトのvhost構成(サブドメインでも機能します)は次のとおりです。
<VirtualHost *:80>
ServerName example.com
ServerAlias *.example.com
<Location "/">
Redirect permanent "https://%{HTTP_Host}%{REQUEST_URI}"
</Location>
</VirtualHost>
<VirtualHost *:443>
[...your vHost configuration...]
SSLEngine On
SSLCertificateFile /path/to/your/cert.pem
SSLCertificateKeyFile /path/to/your/privkey.pem
</VirtualHost>
説明:RedirectとRedirectMatchには通常、Mod_Rewriteからの変数({HTTP_Host}
など)がありませんが、<Location >
を使用すると、これらの変数が割り当てられます。
Redirect permanent
(代替:Redirect 301
)は、http301コードでリダイレクトします。
301リダイレクトは、ユーザーをHTTPからHTTPSにアップグレードするための ベストプラクティス と見なされます。
注:この構成は、サブドメインの ワイルドカード証明書 に基づいています。