Как сделать редирект со страниц .html на страницы без html и также со слешем на конце на без слеша?
2 ответа 2
Для единообразия формирования URL страниц сайтов, и предотвращения появлений дубликатов страниц, вводится стандартная часть файла .htaccess
Есть несколько типов редиректов, рассмотрите каждый из них в кратце, чтобы определить какой из них вам больше подходит.
Редирект через htaccess — самый популярный, и довольно простой способ. Чтобы его сделать, вам понадобится создать в папке сайта файл с названием .htaccess (обратите внимание, что название файла начинается с точки, это не опечатка). Если вы используете CMS WordPress или Joomla, то скорее всего этот файл у вас уже есть, в этом случае вам нужно будет просто отредактировать его.
Читайте ниже чтобы узнать какие именно инструкции в нем нужно прописать, чтобы создать перенаправление.
Редирект при помощи PHP — подойдет в том случае, если вы разбираетесь в PHP и знаете структуру своего сайта. Этот вариант подойдет вам, если ваш сайт написан не на CMS. В ином случае лучше используйте редирект через htaccess.
Редирект HTML — если у вас простой HTML сайт и вам нужно сделать перенаправление для одной страницы — это самый простой вариант. Сделать перенаправление для всего сайта этим способом будет трудозатратно, особенно если у вас на сайте больше 10 страниц.
Редирект при помощи JavaScript — этот способ подойдет также в том случае, если у вас простой сайт, либо если нужно сделать редирект для одной — двух страниц, либо для всего сайта в целом.
Инструкции, которые вы увидите ниже, нужно прописать в файл .htaccess в самое начало.
-
Редирект всего сайта (всех страниц) на другой сайт
Пропишите эту строку в .htaccess файле, и тогда все посетители вошедшие на сайт по протоколу HTTP будут перенаправляться на защищенный протокол HTTPS.
Если вы прописываете редирект для WordPress, то обратите внимание на то, что в файле уже есть строка RewriteEngine On. Поэтому сразу под ней вам нужно добавить такие строки
В PHP редирект делается так: сервер отправляет заголовки headers браузеру посетителя, и тот переходит по нужному адресу автоматически.
Стоит отметить важный момент, отправлять заголовки можно только до вывода другой информации. То есть они должны отправляться до вывода любой другой информации через echo и до отправки кук.
-
Редирект на другой сайт
Чтобы сделать редирект через HTML, нужно добавить на каждую страницу где он планируется специальный мета тег. Мета тег прописывается внутри тега .
На больших сайтах этот метод не удобен, и рекомендуется использовать редирект через htaccess.
-
Редирект на другой сайт
Этот вид перенаправления удобен тем, что его код можно прописать в одном файле (в отличие от html метода), и этот файл вставить на каждой странице прописав
-
Редирект на другой сайт
Для начала включаем SEF (ЧПУ) в глобальных настройках и Перенаправление URL, далее файл htaccess.txt, который лежит в корне (увидите его когда по FTP зайдете), переименовываем в .htaccess (точка в начале), как раз в нем и будет работать.
Пояснение: 301 редирект ( постоянное перенаправление с одного адреса на другой) используют для склейки url адресов, если страница изменила свой адрес или у одного документа имеется полный дубль по другому адресу.
Примеры:
1. У главной страницы сайта site.ru всегда присутствует полный ее дубль по адресу site.ru/index.php
Используем код для перенаправления:
Код:
Redirect 301 /index.php http://site.ru/
Код
RewriteCond %
RewriteRule ^index.php$ http://site.ru/ [R=301,L]
2. Если у вашего сайта несколько имен, но вы хотите, чтобы пользователи всегда видели в адресной строке основное имя сайта, используйте следующие строки сразу после RewriteEngine On:
Код
RewriteCond %
RewriteRule ^(.*) http://site.ru/$1 [R=301,L]
2.1 Редирект с www на без www
Код
RewriteCond %
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
2.2 Редирект без www на www
Код
RewriteCond %
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
3. 301 редирект на окончание .html (для тех у кого включен этот суффикс), перенаправит со страниц site.ru/article и site.ru/article/ на страницу site.ru/article.html
Код
RewriteCond %
RewriteRule .* %1.html [R=301,L]
RewriteRule ^(.*)/$ /$1.html [R=301,L]
Код
4. Редирект с .html на без .html, т.е. с site.ru/article.html на site.ru/article (для тех кто сначала включил .html, а потом решил избавиться от него)
Код
RewriteBase /
RewriteRule (.*).html$ $1 [R=301,L]
Код:
REDIRECTMATCH 301 (.*).html$ http://site.ru$1
5. Редирект для страниц с параметрами, например со страницы site.ru/blog?limitstart=0 на site.ru/blog
Код
RewriteCond %
RewriteRule ^blog http://site.ru/blog? [R=301,L]
Редирект с ?limitstart=0 без указания категории:
Код:
RewriteCond %
RewriteRule (.*) $1? [R=301,L]
6. И еще допустим поменяли структуру и нужно чтобы все страницы старого раздела перенаправлялись на те же страницы только нового раздела, например site.ru/blog/raznoe/article на site.ru/blog/article
Код
RewriteRule ^blog/raznoe/(.*)$ http://site.ru/blog/$1 [R=permanent,L]
7. 301 редирект с адреса без слеша на слеш, то есть с site.ru/article на site.ru/article/
Код
8. Редирект со слеша на без слеша в конце, т.е. с site.ru/article/ на site.ru/article
Код
RewriteRule ^(.*)/$ /$1 [R=301,L]
еще вариант как избавиться от завершающего слеша на конце
Код
вариант избавления от слэша для страниц с параметрами, на примере страниц с пагинацией site.ru/categoriya?start=5/
Код:
RewriteCond %
RewriteRule ^(.*) /$1?start=%1 [R=301,L]
9. Сначала забыли включить SEO в глобальных настройках, а потом включили, как итог — в индексе много документов с /index.php в адресе. Избавиться можно так —
Код
RewriteRule ^index.php/(.*)$ http://mysite.ru/$1 [R=permanent,L]
— по такому же принципу можно избавиться от какой либо вложенности, например редиректить с site.ru/ru/catalog на site.ru/catalog (/ru/ убирается)
10. Запрет доступа для плохих ботов
Код:
SetEnvIfNoCase User-Agent "^Baiduspider" bad_bot
SetEnvIfNoCase User-Agent "^MSNBot" bad_bot
SetEnvIfNoCase User-Agent "^Baiduspider" bad_bot
SetEnvIfNoCase User-Agent "^Ezooms" bad_bot
# продолжите список сами, указывайте юзер-агент плохих ботов
Order Allow,Deny
Allow from all
Deny from env=bad_bot
robots.txt отдаёт, на остальное 404 (для юзер агент — Baiduspider и Ezooms )
Код:
RewriteCond %
RewriteCond %
RewriteRule .* — [R=404]
11. Редирект без указания домена (удобно при переносе сайта на другой домен)
Код
RewriteCond %
RewriteRule ^oldpage$ http://%1/newpage$1 [R=301,L]
12. Редирект домена на другой домен (переадресация сайта)
Код
Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
13. Редирект на любую страницу по ip пользователя или при запросе конкретной страницы (а также по маске имени).
Если у пользователя ip 192.152.37.125, то он будет перенаправлен на страницу user.php:
Код
SetEnvIf REMOTE_ADDR 192.152.37.125 REDIR="redir"
RewriteCond %
RewriteRule ^/$ /user.php
Символ ^ обозначает начало строки.
Символ $ обозначает конец строки.
Символ . обозначает любой символ.
Символ | обозначает альтернативу. Например, выражения "A|B" означают "A или B".
Символ ? ставится после символа (группы), который может как присутствовать, так и отсутствовать.
Символ * ставится после символа (группы), который может отсутствовать или присутствовать неограниченное число раз подряд.
Символ + действует аналогично символу * с той лишь разницей, что предшествующий ему символ обязательно должен присутствовать хотя бы один раз.
Квадратные скобки [] используются для перечисления допустимых символов.
Квадратные скобки [^] используются для перечисления недоступных символов.
Символ ставится перед спецсимволами, если они нужны в своем первозданном виде.
Все, что расположено после символа ‘#’, считается комментарием.