Apache从httpredirect到https不工作

我有以下的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 

我们有从这个服务器运行的许多虚拟主机。 上面的configuration似乎是alignment的,所以我不认为这些警告在这里适用。 也许错了。

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

任何build议,如何让redirect工作?

许多示例都是针对特定configuration的。 无论您的Apache服务器使用哪种configuration,此工作总是有效的:

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

几天前,我遇到了同样的问题。 我尝试在我的VirtualHostconfiguration(适用于HTTP端口80)在Apache的httpd.conf文件中的以下工作。

 <Virtualhost *:80> ServerAdmin [email protected] ServerName site.com ServerAlias site.com www.site.com RedirectMatch permanent ^(.*)$ https://www.site.com$1 </Virtualhost> 

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

更好的使用.htaccess这个(如果可能的话),不需要搞乱apache的configuration文件。 将这些行添加到.htaccess的开头。

 RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 

我在centos 7的apache 2.4上遇到了同样的问题,而不使用RewriteEngine的解决scheme是在VirtualHost for https下为ServerName指令添加443

 <VirtualHost 123.45.67.890:443> DocumentRoot "/opt/www/example-docroot" ServerName example.com:443 

我想上次这发生在我身上,可能是像NameVirtualHost *:80 / NameVirtualHost *:443和/或Listen 80 / Listen 443是apache2的ports.conf以外的地方。

这里是我在VirtualHostredirect到https的除了新闻(除非有一个video不能被提供的HTTPS,所以不得不redirect到http,否则人会得到关于该页面丑陋的警告不安全)的所有页面:

 <VirtualHost *:80> ServerName example.com RewriteEngine On RewriteCond %{REQUEST_URI} !^/press/.* RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NC] </VirtualHost> 

我刚刚发现这个链接,也许它有帮助: http : //www.serveridol.com/2012/09/24/apache-forcing-all-url-to-https-on-www-domain/

 RewriteEngine On RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^/(.*) https://%{SERVER_NAME}/$1