http到https apache重定向


157

Apache 环境中心

尝试设置从http到https的自动重定向

From manage.mydomain.com --- To ---> https://manage.mydomain.com 

我尝试将以下内容添加到我的httpd.conf中,但是没有用

 RewriteEngine on
    ReWriteCond %{SERVER_PORT} !^443$
    RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L]

有任何想法吗?

Answers:


209

我实际上遵循了这个示例,它对我有用:)

NameVirtualHost *:80
<VirtualHost *:80>
   ServerName mysite.example.com
   Redirect permanent / https://mysite.example.com/
</VirtualHost>

<VirtualHost _default_:443>
   ServerName mysite.example.com
  DocumentRoot /usr/local/apache2/htdocs
  SSLEngine On
 # etc...
</VirtualHost>

然后做:

/etc/init.d/httpd restart


7
请注意,仅当您有权访问VirtualHost文件时,此选项才可用。这是推荐的方法。
foochow

4
在httpd.conf上更改此设置后,重新启动apache Web服务器。这样它也将反映并清除您的浏览器缓存。
苏里扬·苏雷什

2
我想报告说这种方法不适用于Ubuntu 12.4,但是建议的RewriteEngine答案可以解决问题。
Deano 2014年

2
您必须重新启动吗?重新加载的破坏性要小得多,它将引入新的配置文件。/etc/init.d/httpd reload|| service httpd reload
Rebecca Dessonville '16

3
由于目的是将其重定向到ssl模式,因此DocumentRoot /usr/local/apache2/htdocs不再需要该线路
Abel Callejo

130
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}

http://www.sslshopper.com/apache-redirect-http-to-https.html

要么

http://www.cyberciti.biz/tips/howto-apache-force-https-secure-connections.html


3
这是一种比已批准的解决方案更好的解决方案,因为即使您在像Pound或BigIP这样的SSL卸载程序后面也可以使用它。这些卸载程序通常会将所有流量传递到同一个端口,并且批准的解决方案在特定情况下
不起作用

1
@spiritoo不是这样。Apache的文档明确说,这是那些你不应该使用mod_rewrite,应该宁愿使用重定向情况之一:httpd.apache.org/docs/2.4/rewrite/avoid.html
卢克Madhanga

4
@LukeMadhanga使用重定向的Apache docrecommands以提高性能。但是,从更通用的意义上讲,RewriteEngine解决方案更好,因为即使在我描述的情况下(卸载)它也可以工作。我评论的目的是为每个用户提供在两个答案之间进行选择的关键。有些人想要通用程序(大型公司),另一些想要性能……这是一个自由选择。
spiritoo 2015年

20
但是,这很棒,如果您想使其更大,则添加此[R = 302,L,QSA],以便所有参数也都传递到安全页面。它应该看起来像:%{REQUEST_URI} [R = 302,L,QSA]
Svetoslav Marinov

我使用了这些行,并且在尝试加载页面时,响应为“无法加载资源:net :: ERR_CONNECTION_REFUSED”。我究竟做错了什么?
塞尔坎(Serkan)

98

apache redirect http to https在此处搜索并降落。这是我在ubuntu上所做的:

1)启用模块

sudo a2enmod rewrite
sudo a2enmod ssl

2)编辑您的网站配置

编辑档案

/etc/apache2/sites-available/000-default.conf

内容应为:

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

<VirtualHost *:443>
    SSLEngine on
    SSLCertificateFile    <path to your crt file>
    SSLCertificateKeyFile   <path to your private key file>

    # Rest of your site config
    # ...
</VirtualHost>
  • 请注意,SSL模块需要证书。您将需要指定一个现有的(如果您购买了一个)或自己生成一个自签名证书

3)重新启动apache2

sudo service apache2 restart

使用Ubuntu 16.04和Apache2。谢谢!
西尔维斯特·姚

11

实际上,您的主题属于https://serverfault.com/,但是您仍然可以尝试检查以下.htaccess指令:

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*) https://%{HTTP_HOST}/$1

11

建议不要使用mod_rewrite,而是使用虚拟主机并重定向。

如果您倾向于使用mod_rewrite:

RewriteEngine On
# This will enable the Rewrite capabilities

RewriteCond %{HTTPS} !=on
# This checks to make sure the connection is not already HTTPS

RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
# This rule will redirect users from their original location, to the same 
location but using HTTPS.
# i.e.  http://www.example.com/foo/ to https://www.example.com/foo/
# The leading slash is made optional so that this will work either in
# httpd.conf or .htaccess context

参考:Httpd Wiki-RewriteHTTPToHTTPS

如果您要查找301永久重定向,则重定向标志应为

 R=301

所以RewriteRule就像

RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L]

6

如果您有Apache2.4,请检查000-default.conf-删除DocumentRoot并添加

Redirect permanent / https://[your-domain]/

5

服务器版本:Apache / 2.4.29(Ubuntu)

在网上和apache的官方文档中进行长时间搜索之后,唯一对我有用的解决方案来自/usr/share/doc/apache2/README.Debian.gz

To enable SSL, type (as user root):

    a2ensite default-ssl
    a2enmod ssl

在文件/etc/apache2/sites-available/000-default.conf中,添加

重定向“ /”“ https://sub.domain.com/

<VirtualHost *:80>

    #ServerName www.example.com
    DocumentRoot /var/www/owncloud
    Redirect "/" "https://sub.domain.com/"

而已。


附言:如果您想不摘录就阅读本手册:

gunzip -cd /usr/share/doc/apache2/README.Debian.gz

3

这对我有用:

RewriteCond %{HTTPS} =off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L,R=301]

3

该代码对我有用。

# ----------port 80----------
RewriteEngine on
# redirect http non-www to https www
RewriteCond %{HTTPS} off
RewriteCond %{SERVER_NAME} =example.com
RewriteRule ^ https://www.%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]

# redirect http www to https www
RewriteCond %{HTTPS} off
RewriteCond %{SERVER_NAME} =www.example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]

# ----------port 443----------
RewriteEngine on
# redirect https non-www to https www
RewriteCond %{SERVER_NAME} !^www\.(.*)$ [NC]
RewriteRule ^ https://www.%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]


2

请在apache Virtualhosting配置中尝试此操作,然后重新加载apache服务

RewriteEngine On

RewriteCond %{HTTPS} off


RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}

-1

我需要这样做的原因很简单,例如将所有http流量从服务器上默认的apache主页重定向到已服务的页面https

由于在配置apache时我还是很环保的,所以我宁愿避免mod_rewrite直接使用它,而是选择更简单的方法:

<VirtualHost *:80>
  <Location "/">
     Redirect permanent "https://%{HTTP_HOST}%{REQUEST_URI}"
  </Location>
</VirtualHost>

<VirtualHost *:443>
  DocumentRoot "/var/www/html"
  SSLEngine on
  ...
</VirtualHost>

我之所以喜欢它,是因为它允许我使用apache变量,因此不必指定实际的主机名,因为它只是一个IP地址,没有关联的域名。

参考文献:https : //stackoverflow.com/a/40291044/2089675

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.