Apache-2.2
Apache從http重定向到https不起作用
我有以下配置文件:
文件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
我們有許多從該伺服器執行的虛擬主機。上面的配置似乎是一致的,所以我不認為這些警告在這裡適用。也許錯了。
在我的瀏覽器中更新預設的 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 webmaster@site.com ServerName site.com ServerAlias site.com www.site.com RedirectMatch permanent ^(.*)$ https://www.site.com$1 </Virtualhost>
這就像魅力一樣,您在其他任何地方都不需要任何配置或任何額外的模組。