次のconfファイルがあります。
file1:
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>
コメントアウトされた行からわかるように、いくつかの方法を試しました。
file2:
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
このサーバーから多数の仮想ホストが実行されています。上記の設定は整合しているようですので、これらの警告がここで適用されているとは思いません。多分間違っている。
ブラウザでデフォルトの80(http)ページを更新すると、常にデフォルトのhttpページが表示されます。
リダイレクトを機能させる方法についての提案はありますか?
多くの例が特定の構成で機能します。これは、Apacheサーバーが使用する構成に関係なく、常に機能します。
RewriteEngine On
RewriteCond %{SERVER_PORT} !443
RewriteRule ^(/(.*))?$ https://%{HTTP_Host}/$1 [R=301,L]
私は数日前にまったく同じ問題に直面していました。動作する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>
これはチャームのように機能し、他の場所に構成を追加したり、追加のモジュールを追加したりする必要はありません。
CentOS 7のApache 2.4でも同じ問題がありましたが、RewriteEngineを使用せずに機能する修正は、httpsのVirtualHostの下のServerNameディレクティブに:44を追加することでした。
<VirtualHost 123.45.67.890:443>
DocumentRoot "/opt/www/example-docroot"
ServerName example.com:443
これには.htaccess
を使用することをお勧めします(可能な場合)。Apache設定ファイルをいじる必要はありません。これらの行を.htaccess
の先頭に追加します。
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI}
私はこのリンクを今日見つけたばかりかもしれませんが、それは役立つかもしれません: http://www.serveridol.com/2012/09/24/Apache-forcing-all-url-to-https-on-www-domain/
これが私に最後に起こったとき、それはNameVirtualHost *:80
/NameVirtualHost *:443
および/またはListen 80
/Listen 443
は、Apache2のports.conf以外の場所にありました。
これは、プレス以外のすべてのページでhttpsにリダイレクトするためにVirtualHostにあるものです(httpsを提供できないビデオがあったため、httpにリダイレクトする必要がありました。そうしないと、ページが安全でないという醜い警告が表示されます):
<VirtualHost *:80>
ServerName example.com
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/press/.*
RewriteRule ^.*$ https://%{HTTP_Host}%{REQUEST_URI} [L,R=301,NC]
</VirtualHost>