222

使用 apache 的环境Centos

尝试设置从 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]

有任何想法吗?

4

12 回答 12

263

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

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

于 2013-04-24T20:35:13.423 回答
174
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

于 2013-04-24T19:27:03.737 回答
118

搜索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
于 2014-11-03T15:49:41.237 回答
15

不推荐使用 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]
于 2017-11-15T07:59:33.457 回答
12

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

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*) https://%{HTTP_HOST}/$1
于 2013-04-24T19:34:24.023 回答
9

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

Redirect permanent / https://[your-domain]/
于 2018-01-27T22:54:22.000 回答
7

这段代码对我有用。

# ----------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]

于 2017-04-05T01:53:32.230 回答
6

我需要这个来做一些简单的事情,比如将所有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

于 2020-03-28T18:44:30.953 回答
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/"

而已。


PS:如果你想看说明书不解压:

gunzip -cd /usr/share/doc/apache2/README.Debian.gz
于 2018-11-01T15:14:27.030 回答
4

请在 apache Virtualhosting 配置中尝试这个,然后重新加载 apache 服务

RewriteEngine On

RewriteCond %{HTTPS} off


RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}
于 2019-01-03T07:39:37.150 回答
3

这对我有用:

RewriteCond %{HTTPS} =off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L,R=301]
于 2016-04-05T07:41:43.130 回答
2

对我来说这有效

RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
于 2020-11-05T20:52:45.843 回答