Перенаправление 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.