Назад | Перейти на главную страницу

Перенаправление URL-адресов https на эквивалент http с использованием файла htaccess

У меня сложилась ситуация, когда я создал новый веб-сайт для клиента, формат URL-адреса которого http://newsite.com. Старый веб-сайт клиентов использовал SSL и имел формат URL https://www.oldsite.co.uk. SSL не нужен на новом сайте и поэтому не использовался.

Старый сайт хорошо ранжируется в поисковых системах, и поэтому клиент хотел бы использовать переадресацию 301 для захвата любых запросов, сделанных для старых страниц, и перенаправления их на эквивалентные страницы на новом сайте, т.е. /contact.php на старом сайте перенаправляет на новую страницу контактов.

Проблема в том, что все поисковые системы проиндексировали версию https: // каждого URL-адреса, и мне нужно перенаправить на стандартный URL-адрес http: // без SSL. Вкратце, что мне нужно, это способ перехватывать любой входящий URL-адрес с https: // впереди и каким-то образом изменять его, чтобы вместо этого искать http: // версию этого URL-адреса.

Содержимое моего файла .htaccess:

RewriteEngine on
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^nielbally\.co\.uk$ [OR]
RewriteCond %{HTTP_HOST} ^www\.nielbally\.co\.uk$
RewriteRule ^/?$ "http\:\/\/artcourseswales\.com\/" [R=301,L]

Лучшая конфигурация - создать виртуальный хост для старого имени сайта с перенаправлением для всех URL-адресов.

<VirtualHost :443>
    ServerName oldsite.co.uk
    ServerAlias www.oldsite.co.uk

    RewriteRule ^(.*)$ http://newsite.co.uk$1
</VirtualHost>

Использовать RewriteRules в файлах .htaccess сложно. В этом случае вы сопоставляете не запрашиваемый URL-адрес, а имя файла, которое, по мнению apache, должно быть обслужено для выполнения запроса.

Сначала вам нужно включить ведение журнала, как описано здесь: http://httpd.apache.org/docs/current/mod/mod_rewrite.html#logging

Так вы будете знать больше о том, что происходит.

Одна из особенностей механизма перезаписи, которая улавливает людей, не подозревающих о том, в каком порядке выполняются операторы RewriteRule и RewriteCond. Обычно RewriteRule должен соответствовать первым. Если он совпадает, то строки RewriteCond оцениваются сверху вниз, и только если все они проходят, выполняется подстановка. В вашем RewriteRule вы сопоставляете /? и я подозреваю, что это никогда не совпадает, и поэтому добавленные вами условия никогда не оцениваются.

Тем не менее, создание перенаправления на виртуальном хосте - лучшее решение, но я не знаю, есть ли у вас доступ к файлу конфигурации apache.