这可能是一个 SO 问题,但听起来很无聊......
每当我设置一个使用 SSL 的网站(不是证书和服务器本身,只是上传文件)时,我总是会在 HTTP 位获得一个网站副本,在 HTTPS 部分获得另一个副本,并使用转发标头将用户来回发送。这也会导致两个副本难以维护。这让我觉得我做错了,因此写了这篇文章。
我理解 SSL 可以“阻止坏人”(或至少减慢一些速度),我知道主机上有用于 SSL 和非 SSL 的单独部分,但有人可以向我稍微介绍一下吗?或者推荐一些互联网上的文章?
...大菜鸟的眼泪...
非常感谢
编辑:Gimel 说详细一点就好了……
嗯,共享主机上的 LAMP,带有共享 SSL 证书,目前正在与 Zencart 作斗争,但希望得到更广泛的建议,我没有命令行访问权限,只有 FTP 和其他东西(unix 有点吓人)...这是你的意思吗?
答案1
假设您使用 apache vhosting,则只需将 DocumentRoot 设置为两者的相同位置即可。要使用符号链接(如Dan C 的回答)确保您已
Options +FollowSymLinks
在您的 httpdocs/.htaccess 文件或主 httpd.conf 中适当设置(在该目录中每次加载页面时都会查找和处理 .htaccess 文件,因此无需重新启动 apache,但是它们比在 httpd.conf 中实现相同的代码要慢,因为此文件仅在服务器启动时处理)。
这是一个 httpd.include,用于从与 HTTP 相同的位置提供 HTTPS 数据:
<VirtualHost *:80>
ServerName test.com
ServerAlias www.test.com
UseCanonicalName Off
DocumentRoot /var/www/vhosts/test.com/httpdocs
CustomLog /var/www/vhosts/test.com/logs/access_log common
ErrorLog /var/www/vhosts/test.com/logs/error_log
<IfModule mod_ssl.c>
SSLEngine off
</IfModule>
Include /var/www/vhosts/test.com/conf/vhost.conf
</VirtualHost>
<VirtualHost *:443>
ServerName test.com
ServerAlias www.test.com
UseCanonicalName Off
DocumentRoot /var/www/vhosts/test.com/httpdocs
CustomLog /var/www/vhosts/test.com/logs/access_log common
ErrorLog /var/www/vhosts/test.com/logs/error_log
<IfModule mod_ssl.c>
SSLEngine on
SSLVerifyClient none
# example ssl certs
SSLCertificateFile /usr/local/apache/certs/my.ca.pem
SSLCertificateKeyFile /usr/local/apache/certs/my.server.key.pem
</IfModule>
Include /var/www/vhosts/test.com/conf/vhost_ssl.conf
</VirtualHost>
有用的链接来自O'Reilly 的分步指南:在 Apache 下配置 SSL和Apache SSL 页面(冗长!)
编辑:
您应该能够通过 FTP 访问您的 conf/httpd.include 文件(它可能位于不同的目录中,但它将位于 /var/www/vhosts/test.com/ 的 vhost 子目录中或类似目录中 - 您可以在主 httpd.conf 中找到 vhost 目录)。
您还应该能够访问 .htaccess 文件 - 它们是 Linux 隐藏文件,因此您可能需要检查 FTP 客户端的文档。或者,尝试在虚拟主机的 httpdocs/ 目录中创建一个 .htaccess 文件 - 如果不能,则该文件可能已经存在。
最后的建议是:联系您的托管服务提供商!
答案2
我倾向于按如下方式存储文档:
html (HTTP resources)
html_ssl (HTTPS resources)
如果每个内容注定不相同,那么通常我会将一个内容符号链接到另一个内容。
ln -s html_ssl html
然后你只需要更新 中的文档html_ssl
。
或者,你可以将两个DocumentRoot
指令指向同一位置。但这不太直观。
答案3
HTTP 和 HTTPS 有单独的设置,但它们由同一目录提供。如果请求通过 http 到达,则响应通过 http 提供,反之亦然。要阻止文档通过 http 提供,您必须设置具有单独 DocumentRoot 的虚拟主机并将其放在那里。