正确的Apache重定向从http到https


3

我为我的服务器上的新站点设置了一个新的虚拟主机,但尽管设置与原始站点完全相同,但它的行为却很奇怪。

我希望将所有请求重定向到HTTPS,简单地说。在我的主站点(工作站点)我有这个指定 VirtualHost 配置,并在 .htaccess 我指定了一个额外的规则来允许短网址。具体来说,非工作网站的问题是,如果我试图去 example.com/url,重定向转到 https://example.comurl 并删除必要的 / 来自网址。

我将确切的配置复制到新的 VirtualHost.htaccess 来自工作站点的文件,所以我不确定为什么它不适用于新的。我的两个站点的DNS记录都使用A记录指向它,没有重定向或在DNS级别发生任何事情。我试过放一个 / 在结束时 Redirect 下面的代码中的行,但问题没有解决。服务器是Ubuntu 14.04,Apache是​​2.4.7版。这两个站点都是独立的域名 .conf 使用的文件,但它们托管在具有相同IP地址的同一服务器上。我该如何解决这个问题?

中的相关代码 VirtualHost

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    Redirect permanent / https://example.com
</VirtualHost>

并在 .htaccess

RewriteEngine on
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule !.*\.html$ %{REQUEST_FILENAME}.html [L]

如果它有帮助/重要,这是我的VirtualHost文件中的SSL配置,尽管它位于所有其他指令之外的文件的最开头:

SSLCipherSuite AES128+EECDH:AES128+EDH
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder On
Header always set Strict-Transport-Security "max-age=63072000; includeSubdo$
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff

SSLCompression off
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"

这是专门针对的配置 VirtualHost 对于网站:

<VirtualHost *:443>
    ServerName example.com
    ServerAdmin user@example.com
    DocumentRoot /var/www/example
    ErrorLog ${APACHE_LOG_DIR}/errorexample.log
    Options -Indexes

    SSLEngine on
    SSLCertificateFile /etc/ssl/example/examplecert.crt
    SSLCertificateKeyFile /etc/ssl/example/examplekey.key
    SSLCertificateChainFile /etc/ssl/chain/class1.pem
</VirtualHost>

1
你有SSL定义?
td512

1
也许不同的Apache版本?您是否尝试将斜杠放在Redirect行的末尾?像这样? Redirect permanent / https://example.com/
Marki555

我确实已经定义了SSL,我在OP中添加了相关的代码块。我也尝试过放一个 / 在结束时 Redirect 命令,但没有解决问题。
vaindil

Answers:


4

要重定向到HTTPS:

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

但是你需要有一个ssl的虚拟主机:

NameVirtualHost *:443
<VirtualHost *:443>
    ServerName example.com
    ServerAlias www.example.com
    SSLEngine on
    SSLCertificateFile    /etc/apache2/ssl/apache.crt
    SSLCertificateKeyFile /etc/apache2/ssl/apache.key
</VirtualHost>

注意: 你必须创建一个SSL证书......但是有 很棒的教程 为了这!


嗯,这似乎解决了这个问题。我已经指定了SSL虚拟主机(我怀疑你在我编辑我的时候写了这个答案,然后添加它),但我改变了我的 Redirect 换行到你的第一个代码块,现在一切正常。非常感谢!
vaindil

乐于帮助 :)
Ricain

你能看看这个链接: askubuntu.com/questions/876767/...
Nullpointer

在vhosts文件中,重写引擎的位置在哪里?
Andrew
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.