正確的 Apache 從 http 重定向到 https

正確的 Apache 從 http 重定向到 https

我在伺服器上為新網站設定了一個新的虛擬主機,但儘管其設定與我的原始網站完全相同,但它的行為很奇怪。

簡而言之,我希望所有請求都會重新導向到 HTTPS。在我的主網站(工作網站)上,我在配置中指定了這一點VirtualHost,並且.htaccess指定了一條附加規則來允許短 URL。具體來說,非工作網站上的問題是,如果我嘗試轉到example.com/url,重定向會轉到 URL並從 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 [email protected]
    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

重定向到 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 憑證...但有很棒的教程為了這!

相關內容