我在我的服务器上为新网站设置了一个新的虚拟主机,但尽管它的设置与我的原始网站完全相同,但它的行为却很奇怪。
简单来说,我希望所有请求都重定向到 HTTPS。在我的主站点(工作站点)上,我在配置中指定了这一点VirtualHost
,并且在.htaccess
我指定了一条附加规则以允许短 URL。具体来说,非工作站点上的问题是,如果我尝试转到example.com/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 证书...但是很棒的教程为了这!