次の conf ファイルがあります:
ファイル1:
NameVirtualHost 123.45.67.890:80
<VirtualHost 123.45.67.890:80>
ServerName example.com
RedirectPermanent / https://example.com/
# RewriteEngine On
# RewriteCond %{SERVER_PORT} !^443$
# RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [L,R]
# SSLRequireSSL
# Redirect permanent /secure https://example.com/
# Redirect / https://example.com/
</VirtualHost>
コメントアウトされた行からわかるように、私はいくつかのアプローチを試しました。
ファイル2:
NameVirtualHost 123.45.67.890:443
<VirtualHost 123.45.67.890:443>
DocumentRoot "/opt/www/example-docroot"
ServerName example.com
DirectoryIndex index.html
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /etc/httpd/conf.d/ssl/example.com/csr.example.2011.pem.blade
SSLCertificateKeyFile /etc/httpd/conf.d/ssl/example.com/nokey.example.2011.pem
SSLCACertificateFile /etc/httpd/conf.d/ssl/example.com/CA.blade.2011.csr
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
<Directory "/etc/httpd/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
簡潔にするために一部を削除し、無実の人々を保護するために名前を変更しました。
サーバー上の/etc/httpd/vhostsファイルを更新します
実行
apachectl restart
次のような警告が表示されます:
[warn] NameVirtualHost 123.45.67.890:80 has no VirtualHosts
[warn] NameVirtualHost 123.45.67.890:80 has no VirtualHosts
このサーバーから多数の vhost が実行されています。上記の構成は一致しているように見えるため、これらの警告はここでは適用されないと思います。間違っているかもしれません。
ブラウザでデフォルトの 80 (http) ページを更新すると、常にデフォルトの http ページが表示されます。
リダイレクトを機能させる方法について何か提案はありますか?
答え1
多くの例は特定の構成で動作します。次の例は、Apache サーバーがどの構成を使用していても常に動作します。
RewriteEngine On
RewriteCond %{SERVER_PORT} !443
RewriteRule ^(/(.*))?$ https://%{HTTP_HOST}/$1 [R=301,L]
答え2
数日前にまったく同じ問題に直面しました。Apache の httpd.conf ファイルの VirtualHost 構成 (http ポート 80 に適用可能) で次の操作を試したところ、うまくいきました。
<Virtualhost *:80>
ServerAdmin [email protected]
ServerName site.com
ServerAlias site.com www.site.com
RedirectMatch permanent ^(.*)$ https://www.site.com$1
</Virtualhost>
これはうまく機能し、他の場所での設定や追加のモジュールは必要ありません。
答え3
これをもっとうまく使うと.htaccess
(可能なら)、Apache の設定ファイルをいじる必要がなくなります。 の先頭にこれらの行を追加します.htaccess
。
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
答え4
私たちの問題は、設定ファイルの優先順位でした。簡単に言うと、HTTP VirtualHost が、000-default.conf
独自の設定ファイルで作成した設定を上書きしていたのです。
これは、「デフォルト」という言葉の意味を知っている人にとっては混乱を招くものです。「デフォルト」とは、他の場所で定義されていない場合にのみ使用されるものを意味します。私たちは愚かにも、000-default.conf
別の構成ファイルで定義されていない場合にのみ構成が提供されるものと想定していました。
私たちは間違っていました。Apache は、ファイル名の英数字順に基づいて、最初に遭遇したファイルの設定を使用するだけです。そのファイルで一致する VirtualHost が見つからない場合は、次のファイルに移動します。仕組みがわからない場合は、面白い混乱を引き起こしますが、一度理解すると、かなり便利です。