我在伺服器上為新網站設定了一個新的虛擬主機,但儘管其設定與我的原始網站完全相同,但它的行為很奇怪。
簡而言之,我希望所有請求都會重新導向到 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 憑證...但有很棒的教程為了這!