好的,所以我从来没有使用SSL / HTTPS的经验,我只处理过标准的HTTP。 最近我开始在一个需要SSL的网站上工作。 所以当然,我已经出去研究如何开始。 我已经到了成功安装SSL证书的阶段 – 绿色挂锁出现,服务器响应端口443上的HTTPS请求。我遇到的问题是,无论我做什么,我都不能让任何页面出现使用HTTPS / SSL,但他们似乎很好的端口80 / HTTP(直到我将HTTPredirect到HTTPS)。
简单地说,我可以访问HTTPS站点,但是我的页面没有被发送,而是为每个请求发送一个404。
<VirtualHost *:80> ServerName [serverName] RewriteEngine On RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=302] </VirtualHost> <VirtualHost *:443> ServerName [serverName] ServerAdmin [email] DocumentRoot [docRoot] # I know the following SSL cert stuff is correct SSLEngine On SSLCertificateFile [...]/[domain].crt SSLCertificateKeyFile [...]/[certificate].key SSLCertificateChainFile [...]/[theotherone].crt ErrorLog ${APACHE_LOG_DIR}/[custom]_error.log CustomLog ${APACHE_LOG_DIR}/[custom]_access.log combined <Directory "[docRoot]"> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> </VirtualHost>
我不确定是否还有其他可能需要查看的内容或其他详细信息,但是如果有,请告诉我。
在configuration文件中search一遍之后,我已经确定,无论什么原因,当连接到HTTPS时,服务器在默认configuration(/ var / www /)下使用文档根目录,但是这个默认configuration没有启用a2ensite。 我似乎无法确定导致此问题的configuration位于何处
我不记得我是怎么想出来的,但是我偶然发现了一些build议说的地方:
<VirtualHost _default_:443>
代替:
<VirtualHost *:443>
由于取代了,我的SSL一直在完美工作。
尝试编辑你的文件看起来像这样:
这是一个非常基本的conf,如果这个工作添加您的redirect,如果仍然需要。
如果这不起作用,请显示您的ssl.conf
NameVirtualHost *:80 NameVirtualHost *:443 <VirtualHost *:80> <Directory "[docRoot]"> AllowOverride All </Directory> DocumentRoot [docRoot] ServerName [serverName] </VirtualHost> <VirtualHost *:443> SSLEngine on SSLCertificateFile [...]/[domain].crt SSLCertificateKeyFile [...]/[certificate].key SSLCertificateChainFile [...]/[theotherone].crt <Directory "[docRoot]"> AllowOverride All </Directory> DocumentRoot [docRoot] ServerName [serverName] </VirtualHost>
是否有必要将所有http请求redirect到https? 因为这似乎是你在这里要做的。
我build议你先从你的conf里删除下面几行:
RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=302]
我怀疑那里的语法可能是错的。 然后尝试在每个http://和https://协议上重新连接。