Apache-2.2

Apache從http重定向到https不起作用

  • July 15, 2021

我有以下配置文件:

文件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>

這就像魅力一樣,您在其他任何地方都不需要任何配置或任何額外的模組。

引用自:https://serverfault.com/questions/420272