2016-07-15 6 views
0

У меня есть странная проблема с моими доменами в поисковых системах:RewriteCond в httpd.conf, чтобы предотвратить HTTPS с неправильным доменом, заканчивающимся

Я владеющий несколько доменов, скажем:

example.com 
example.net 
example.org 

Все домены указывая на мой сервер, поэтому я добавил редирект на верхней части файла httpd.conf, чтобы предотвратить doublicated содержания:

RewriteCond %{HTTP_HOST} !^example\.com$ 
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L] 

Это хорошо работает для пользователей.

Поскольку я получил SSL-сертификат для домена на .com, я перенаправлять все пользователь к версии HTTPS:

RewriteCond %{HTTPS} off 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} 

Рабочих также хорошо для пользователей.

Теперь странная проблема: почему-то иногда поисковые системы перечисляя https://example.net/apage.php и так как я не получил SSL-сертификата для .net.org) домена, когда посетители clickling этих результатов поиска двигатели, они получат предупреждение о том, что соединение с сайтом небезопасно. Это очень запутанно, и я не мог найти способ перенаправить посетителей на правильный домен .com, прежде чем появится предупреждение браузера.

У вас есть идея решить эту проблему с помощью условия mod_rewrite или любой работы?

ответ

0

mod_rewrite работает, отправив перенаправление в браузер, чтобы он сначала дошел до сервера. Предупреждение, отображаемое браузером, происходит до этого.

Возможно, вы можете приобрести сертификат домена с несколькими доменами.

Если нет, вы можете заставить законных поисковых роботов не сканировать версии .net и .org вашего сайта. Может быть, в том числе файла robots.txt только для этих доменов, как описано здесь: Stop Google from indexing

+0

Что я не понимаю, почему он не перенаправляется уже тогда, когда окончание домена не является .com, независимо от запроса https или нет. – lickmycode

0

Этого набор переписывает перенаправлять любой хост клиент использовал с УИР он используется для того же URL в https:

RewriteCond %{HTTPS} off 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} 

Таким образом, любой, кто запрашивает http://example.net/something, проходит через них в https://example.net/something. Если вообще ваш другой набор переписываний был бы единственным.

В любом случае использование mod_rewrite для такого простого перенаправления просто излишне усложняет ситуацию, и, конечно, проверка того, отключена ли HTTPS в виртуальном хосте, отличном от SSL, является избыточным.

Правильный способ перенаправлять только в конечном итоге с example.com в https:

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> 
  • Если есть содержание в example.com для порта 80 вы хотите, чтобы служить вам просто добавить еще одну запись VirtualHost для этого ServerName или иначе просто добавить еще один ServerAlias ​​для example.com в предыдущем виртуальном хосте.

Тогда:

<VirtualHost *:443> 
ServerName example.com 
#.....other directives here 
</VirtualHost> 

Таким образом, нет никакой возможности ошибки, которая будет принимать какую-либо Hostname кроме example.com быть запрошена по протоколу HTTPS.

Все без необходимости свернутых переписаний, которые не являются необходимыми.