システム:Ubuntu 14.04、Apache 2.4.7
http://domain.com および https://domain.com へのすべてのリクエストを https://domain.com にリダイレクトしたい=。他のいくつかのサブドメイン(tools.domain.comとphpmyadmin.domain.com)が今のところhttp経由でアクセス可能なままである一方で、「www」サブドメインへのリクエストをメインのdomain.comホストにリダイレクトしたいと思います。
これはすべて、domain.comのvirtualhost構成ファイル(/etc/Apache2/sites-available/domain.com.conf
以下の完全なコンテンツ)、Apache2サービスを数回再起動しました。
http://domain.com から https://domain.com へのリダイレクトは機能します。 http://www.domain.com から https://domain.com へのリダイレクトは機能しません。 https://www.domain.com から https://domain.com へのリダイレクトは機能しません。
Virtualhostファイルの内容は次のとおりです。
<VirtualHost *:*>
ServerName www.domain.com
Redirect permanent / https://domain.com/
</VirtualHost>
<VirtualHost _default_:80>
ServerName domain.com
Redirect permanent / https://domain.com/
LogLevel error
</VirtualHost>
<VirtualHost *:80>
ServerName tools.domain.com
DocumentRoot /var/www/domain.com/subdomains/tools/public
</VirtualHost>
<VirtualHost *:80>
ServerName phpmyadmin.domain.com
DocumentRoot /usr/share/phpmyadmin
</VirtualHost>
<VirtualHost _default_:443>
ServerName domain.com
DocumentRoot /var/www/domain.com/public
<Directory /var/www/domain.com/public>
Require all granted
</Directory>
# SSL CERTIFICATES
GnuTLSEnable on
GnuTLSExportCertificates on
GnuTLSCacheTimeout 500
GnuTLSCertificateFile /etc/ssl/certs/domain.com-certificate-125023.crt
GnuTLSKeyFile /etc/ssl/private/domain.com.key
GnuTLSPriorities NORMAL
</VirtualHost>
愚かな私:問題はサーバーを超えていました! DNSゾーンに「www」サブドメインを設定していませんでした。私はそれを修正しました、そして今、私はほとんどそこにいます。
_default_
はデフォルトを意味しますこのような設定で:
<VirtualHost _default_:80>
...
</VirtualHost>
<VirtualHost _default_:443>
...
</VirtualHost>
<VirtualHost *:*>
...
</VirtualHost>
最後の仮想ホストは、ポート80および443で到達できません。これらのポートに対する要求は、関連する_default_
仮想ホストによって処理されるためです。 *:*
仮想ホストはおそらくまったく必要ありません(パブリックユーザーがより多くのポートを使用することを期待していますか?)。
したがって、すべてをhttps://example.com
にリダイレクトするには、たとえば次のようにします。
<VirtualHost *:443>
ServerName example.com
# SSL config
...
</VirtualHost>
<VirtualHost *:80>
RewriteEngine On
RewriteRule ^ https://example.com%{REQUEST_URI} [R=301,L]
</VirtualHost>
<VirtualHost *:443>
# SSL config
RewriteEngine On
RewriteRule ^ https://example.com%{REQUEST_URI} [R=301,L]
</VirtualHost>
リダイレクトの使用はone urlにのみ一致するため、すべてキャプチャの書き換えルールを使用していることに注意してください。
Mod_rewriteを使用しようとしましたか?次のmod_rewriteルールでも同じことができます。
RewriteCond %{SERVER_PORT} 80 [OR,NC]
RewriteCond %{HTTP_Host} ^www\.domain\.com$ [NC]
RewriteRule ^(.*)$ https://domain.com/$1 [R=301,L]