http到https apache重定向

Dea*_*ano 143 linux apache webserver

环境 Centos与apache

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

From manage.mydomain.com --- To ---> https://manage.mydomain.com 
Run Code Online (Sandbox Code Playgroud)

我已经尝试将以下内容添加到我的httpd.conf中,但它不起作用

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

有任何想法吗?

Dea*_*ano 197

我实际上已经按照这个例子,它对我有用:)

NameVirtualHost *:80
<VirtualHost *:80>
   ServerName mysite.example.com
   DocumentRoot /usr/local/apache2/htdocs 
   Redirect permanent / https://mysite.example.com/
</VirtualHost>

<VirtualHost _default_:443>
   ServerName mysite.example.com
  DocumentRoot /usr/local/apache2/htdocs
  SSLEngine On
 # etc...
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

然后做:

/etc/init.d/httpd restart

  • 请注意,仅当您有权访问VirtualHost文件时,才能使用此选项.这是推荐的方法. (6认同)
  • 在httpd.conf上更改后,重启apache web server.这样它也会反映并清除您的浏览器缓存. (4认同)
  • 我想报告一下这种方法不适用于Ubuntu 12.4,但是建议的RewriteEngine答案可以解决问题。 (2认同)
  • 你需要重启吗?重新加载的破坏性要小得多,并且会引入新的配置文件.`/etc/init.d/httpd reload` || `service httpd reload` (2认同)
  • 因为目的是将其重定向到ssl模式,所以不再需要`DocumentRoot / usr / local / apache2 / htdocs`行。 (2认同)
  • 重定向所有内容时,您甚至不需要 DocumentRoot。因此,您可以删除“&lt;VirtualHost *:80&gt;”内的“DocumentRoot /usr/local/apache2/htdocs”。您仍然需要 `&lt;VirtualHost _default_:443&gt;` 中的 `DocumentRoot` [将请求重定向到 SSL](https://wiki.apache.org/httpd/RedirectSSL) (2认同)

Ide*_*vaj 121

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}
Run Code Online (Sandbox Code Playgroud)

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

要么

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

  • 这很好,但是,如果你想让它更大,那么添加这个[R = 302,L,QSA],所以任何参数也传递给安全页面.它应该如下所示:%{REQUEST_URI} [R = 302,L,QSA] (16认同)
  • @LukeMadhanga使用Redirect实现性能的Apache docrecommands.但是,RewriteEngine解决方案在更通用的意义上更好,因为它甚至可以在我描述的情况下工作(卸载).我的评论的目标是为每个用户提供在两个答案之间进行选择的关键.有些人想要通用程序(大兵团),有些人想要表现......这是一个自由选择. (4认同)
  • 这是一个比批准的解决方案更好的解决方案,因为即使您支持像Pound或BigIP这样的SSL卸载程序,它也能正常工作.这些卸载程序通常会将所有流量传递到同一端口,并且批准的解决方案在该特定情况下不起作用 (2认同)
  • @spiritoo 不是这样。Apache 文档特别指出,这是您不应该使用 mod_rewrite 而应该使用重定向的情况之一:https://httpd.apache.org/docs/2.4/rewrite/avoid.html (2认同)
  • @SvetoslavMarinov 这个[评论](/sf/ask/978449601/?noredirect=1&amp;lq=1#comment73677715_13997498)意味着,“当在此上下文中使用了“[R]”,并且重写的 URL 中不存在“?”,因此它在这里是多余的”。 (2认同)

Jos*_*ush 90

搜索apache redirect http to https并登陆这里.这就是我在ubuntu上所做的:

1)启用模块

sudo a2enmod rewrite
sudo a2enmod ssl
Run Code Online (Sandbox Code Playgroud)

2)编辑您的站点配置

编辑文件

/etc/apache2/sites-available/000-default.conf
Run Code Online (Sandbox Code Playgroud)

内容应该是:

<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>
Run Code Online (Sandbox Code Playgroud)
  • 请注意,SSL模块需要证书.您需要指定现有的(如果您购买了一个)或自己生成自签名证书.

3)重启apache2

sudo service apache2 restart
Run Code Online (Sandbox Code Playgroud)


sma*_*c89 14

我需要这个来完成一些简单的事情,例如将所有 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>
Run Code Online (Sandbox Code Playgroud)

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

参考: 在目标中使用 RedirectMatch 和 HTTP_HOST

  • 为我工作,正是我正在寻找的东西,因为我不想将 ModRewrite 与 Apache 2.4.38 一起使用。唯一的区别是,我使用了“&lt;Location /&gt;”,因为那里不需要引号。(未使用引号进行测试。) (2认同)

5er*_*ant 11

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

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


Vin*_*ncy 10

建议不要使用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
Run Code Online (Sandbox Code Playgroud)

参考:Httpd Wiki - RewriteHTTPToHTTPS

如果您正在寻找301永久重定向,那么重定向标志应为,

 R=301
Run Code Online (Sandbox Code Playgroud)

所以RewriteRule就像,

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


小智 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]
Run Code Online (Sandbox Code Playgroud)

# ----------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]
Run Code Online (Sandbox Code Playgroud)


小智 6

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

Redirect permanent / https://[your-domain]/
Run Code Online (Sandbox Code Playgroud)


Dim*_*Dak 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
Run Code Online (Sandbox Code Playgroud)

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

而已。


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

gunzip -cd /usr/share/doc/apache2/README.Debian.gz
Run Code Online (Sandbox Code Playgroud)


小智 5

对我来说,这有效:

RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)