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

Jah*_*mic 3 https virtualhost apache-2.2

我有以下配置文件:

文件 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>
Run Code Online (Sandbox Code Playgroud)

从注释掉的行中可以看出,我尝试了几种方法。

文件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>
Run Code Online (Sandbox Code Playgroud)

为了简单起见,删除了一些东西,更改了名称以保护无辜者。

我更新了服务器 /etc/httpd/vhosts 上的这些文件

然后运行

apachectl restart
Run Code Online (Sandbox Code Playgroud)

这确实给了我这些警告:

[warn] NameVirtualHost 123.45.67.890:80 has no VirtualHosts
[warn] NameVirtualHost 123.45.67.890:80 has no VirtualHosts
Run Code Online (Sandbox Code Playgroud)

我们有许多从该服务器运行的虚拟主机。上面的配置似乎是一致的,所以我认为这些警告不适用于这里。也许错了。

在我的浏览器中更新默认的 80 (http) 页面,总是显示默认的 http 页面。

关于如何使重定向工作的任何建议?

小智 15

许多示例适用于特定配置。无论您的 Apache 服务器使用哪种配置,这个总是有效的:

RewriteEngine On
RewriteCond %{SERVER_PORT} !443
RewriteRule ^(/(.*))?$ https://%{HTTP_HOST}/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)

  • @Richard 刚刚在 CentOS 上工作,我在 httpd/conf.d 下创建了一个新的 redirect.conf 文件,并将其添加到 &lt;VirtualHost *:80&gt; 指令中。我将其与 django 一起使用,并且必须删除重定向中“$1”之前的尾部斜杠,以避免额外的斜杠。 (2认同)

web*_*tat 11

几天前我遇到了完全相同的问题。我在 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>
Run Code Online (Sandbox Code Playgroud)

这就像魅力一样,你不需要任何其他地方的任何配置或任何额外的模块。

  • +1 表示不使用 `mod_rewrite`。 (2认同)