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

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

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

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

Содержимое моего файла.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]

2 ответа

Лучшая конфигурация - создать виртуальный хост для старого имени сайта с перенаправлением для всех 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

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

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

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

Другие вопросы по тегам