我的搜索引擎中的域名出现了一个奇怪的问题:
我拥有几个域名,让我们说:
example.com
example.net
example.org
所有域都指向我的服务器,这就是为什么我在httpd.conf文件的顶部添加了一个重定向,以防止出现双重内容:
RewriteCond %{HTTP_HOST} !^example\.com$
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
它对用户来说效果很好。
由于我获得了 .com 域的ssl证书,因此我将所有用户重定向到https版本:
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}
为用户工作也很好。
现在出现了一个奇怪的问题:出于某种原因,有时候搜索引擎会列出https://example.net/apage.php,因为我没有获得 .net 的ssl证书(以及 .org )域名,当访问者在搜索引擎中点击这些结果时,他们会收到浏览器警告,表明与网站的连接不安全。 这非常令人困惑,在浏览器警告出现之前,我无法找到将访问者重定向到正确的 .com 域的方法。
你有想法用mod_rewrite条件或任何解决方法解决这个问题吗?
答案 0 :(得分:0)
mod_rewrite通过向浏览器发送重定向来工作,因此必须首先到达服务器。浏览器显示的警告发生在此之前。
也许您可以购买多域SSL证书。
如果没有,您可以让合法搜索机器人不要抓取您网站的.net和.org版本。也许只为这些域添加robots.txt文件,如下所述:Stop Google from indexing
答案 1 :(得分:0)
这组重写将客户端使用的任何主机与其使用的uri重定向到https中相同的URL:
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}
所有请求http://example.net/something通过这些内容的人都会以https://example.net/something结尾。如果你所有其他的重写都是必要的。
在任何情况下,使用mod_rewrite进行这种简单的重定向只会让事情变得更加复杂,并且肯定会检查非SSL虚拟主机中HTTPS是否关闭是多余的。
正确的重定向方式只能以https:
中的example.com结束NamedVirtualHost *:80 <-- use this for more vh's present and if this is 2.2.x
<VirtualHost *:80>
ServerName example.net
ServerAlias example.org
Redirect / https://example.com/
</VirtualHost>
然后:
<VirtualHost *:443>
ServerName example.com
#.....other directives here
</VirtualHost>
通过这种方式,不会出现将example.com以外的任何主机名作为https请求的错误。
所有这些都不需要复杂的重写,这是不必要的。