Всякое ucp php redirect. Как в PHP задать редирект на другой URL до загрузки страницы? Дополнение HttpFox для Firefox

Довольно важный момент при настройке сайта. Неправильно настроенный редирект может сильно повредить поисковой выдачи сайта. Самые распространённые ситуации, в которых приходиться использование Permanent Redirect 301:

  • Смена адреса сайта - вы купили свой домен и решили переехать с site.example.com на site.ru
  • Склейка зеркал - если ваш сайт доступен по адресу www.site.ru и site.ru, поисковые системы могут посчитать это как два разных сайта, поэтому для начала необходимо определиться с главным зеркалом (с www или без www) и настроить редиректы на основное зеркало.
  • Когда страница (одна или несколько) сменила свой адрес - в какой то момент стало понятно, что адреса http://example.com/index.php?option=com_content&task=view&id=23&Itemid=1 не есть хорошо, и нужно их переделать в http://example.com/sport/news12 , но жалко терять позиции в индексе поисковых систем (поскольку для них это будет новая статья).
  • Еще один способ для борьбы с дублями страниц

Важно: если страница перемещена временно используйте 302 Moved Temporarily. Склейки страниц в этом случае не произойдет и страницу с редиректом можно будет всегда восстановить.

Permanent Redirect 301 для apache (.htaccess)

Вставлять правила нужно сразу после строк:

RewriteEngine On RewriteBase / # чтобы обрезать полный путь, от корня сервера до корня сайта

сами правила задаются при помощи регулярных выражений, напомним синтаксис:

  • Метасимволы, для задания групп символов или «меток» в шаблоне:
    • ^ - метка начала строки,
    • $ - метка конца строки,
    • ! - отрицание,
    • \ - экранирующий слеш, позволяет считать следующий за ним метасимвол обычным символом,
    • . - точка, обозначает любой символ, но только один,
    • () - группировка.
  • Модификаторы, ставятся после обычных символов, метасимволов или их групп:
    • ? - символ повторяется 0 или 1 раз,
    • * - повторяется от 0 до 65536 раз,
    • + - повторяется от 1 до 65536 раз.
  • Флаги, определяют дополнительные опции для данного правила:
    • NC - (nocase) отключает проверку регистра символов.
    • R - (redirect) останавливает процесс преобразования и возвращает результат браузеру клиента как редирект на данную страницу (302, MOVED TEMPORARY).
      С данным флагом можно указать другой код результата, например R=301 возвратит редирект с кодом 301 (MOVED PERMANENTLY). Как вы понимаете, это то самое, что нам и надо.
    • L - (last) останавливает процесс преобразования, и текущая ссылка считается окончательной.

Рассмотри наиболее часто встречаемые ситуации:

RewriteCond %{HTTP_HOST} ^www\.(.*) RewriteRule ^(.*)$ http://%1/$1 RewriteCond обозначаем условие, при совпадении с которым будет выполнено правило RewriteRule. Редирект с index.php (html) на главную страницу RewriteCond %{THE_REQUEST} ^{3,9}\ /index\.(php|html|htm)\ HTTP/ RewriteRule ^(.*)index\.(php|html|htm)$ $1 Редирект при смене структуры сайта RewriteRule ^post/category/(.*)$ blog/category/$1 RewriteRule ^post/(.*)$ blog/post/$1 Permanent Redirect 301 на PHP

Чтобы сообщить браузеру о том, что с запрошенной им страницы нужно произвести редирект на адрес http://site.ru выполните команды:

Header("HTTP/1.1 301 Moved Permanently"); header("Location: http://site.ru"); exit();

Permanent Redirect 301 для nginx

Правила редиректа описывается в секции server.

Редирект с www.site.ru на site.ru server { listen 80; server_name www.site.ru; rewrite ^ http://site.ru$request_uri? permanent; }

или общее правило для всех сайтов:

Server { server_name ~^(?! www\.); rewrite ^ http://www.$host$request_uri permanent; }

Редирект для с site.ru на www.site.ru server { listen 80; server_name site.ru; rewrite ^ http://www.site.ru$request_uri? permanent; } Редирект с index.php на главную страницу location = /index.php { if ($request_uri = /index.php) { rewrite ^ http://$host? permanent;#301 redirect } fastcgi_pass unix:/tmp/fastcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }

Конфигурационный файл .htaccess является конфигом для веб-серверов на Apache. Большинство хостингов работают через этот сервер, поэтому на каждом сайте присутствует этот файл. Вебмастера могут частично управлять его работой внося в него свои изменения. В этой статье мы рассмотрим директивы и правила, которые можно менять в работе сервера.

Самый главный файл .htaccess располагается в корне сайта:

Его действия распространяются на текущий каталог и на все вложенные каталоги. Т.е. у владельцев сайтов есть возможность воздействовать только на работу своего проекта, не мешая работе всего сервера. Если этот файл отсутствует, то его можно создать с помощью любого блокнота. Главное, чтобы название файла было ".htaccess" - без форматов.txt, .doc и т.д.

Через файл .htaccess чаще всего настраивают 301 редиректы на уровне сервера, что сильно ускоряет процесс перехода на новую страницу, т.к. не надо загружать промежуточную страницу. Также здесь прописывается какой файл обрабатывает 404 ошибку .

Чуть ниже мы рассмотрим все распространенные варианты редиректов через .htaccess , а для начала ознакомимся с опциями и правилами.

Чтобы иметь возможность работать с редиректами нужно включить модуль ReWriteEngine . Для этого необходимо прописать две строчки кода (желательно в самом верху файла .htaccess ):

Options +FollowSymLinks RewriteEngine On

Разместите эти строки в самом верху файла .htaccess , чтобы иметь возможность работать с директивами модуля mod_write.

Также на хостинге должны быть включены модули mod_alias (для поддержки Redirect, RedirectPermanent и RedirectMatch).

1. Правила Redirect, RewriteRule и RewriteCond 1.1. Директива Redirect

Синтаксис Redirect :

Redirect /откуда http://куда_полный_адрес

Redirect устанавливает прямой редирект с одной страницы на другую.

В status пишут код редиректа. Является необязательным параметром. Чаще всего пишут 301, что сигнализирует о постоянном смене адреса страницы.

Важно, чтобы страница "откуда" была прописана в формате без указания полного адреса сайта, но с указанием полного относительного адреса URL начиная со слэша "/" (т.е. с корня сайта). Страницу куда идет редирект нужно писать полностью, т.е. абсолютный адрес страницы URL (т.е. с названием домена и протокола http или https).

Например

Redirect 301 /oldpage.php http://site/newpage.php

Можно также писать по другому

RedirectPermanent 301 /oldpage.php http://site/newpage.php или Redirect permanent 301 /oldpage.php http://site/newpage.php 1.2. Директива RewriteRule

Директива RewriteRule устанавливает правила перехода. Синтаксис следующий:

RewriteRule Шаблон Подстановка [коды]
  • При внешнем редиректе меняется урл адреса в строке браузера - " "
  • При внутреннем - не меняет урл адреса в строке браузера - " " или "[L] "
1.3. Директива RewriteCond

Директива RewriteCond определяет условия при котором выполняется правила в RewriteRule.

RewriteCond Сравниваемая_Строка Условие

Например, этими условиями могут быть браузер пользователя, IP-адрес , заголовок и т.д.

1.4. Директива RedirectMatch

Директива RedirectMatch аналогична Redirect с той лишь разницей, что позволяет записывать регулярные выражения.

RedirectMatch Откуда Куда 2. Примеры 301 редиректов в.htaccess

Мы уже рассматривали множество примеров с редиректом по .htaccess в статьях:

  • Смена адреса сайта - редирект со старого домена на новый

Здесь мы дополним варианты редиректов, которых еще не было.

2.1. Редирект с одной страницы на другую

Редирект с site.ru/cat/oldpage на site.ru/newpage.html

RewriteRule ^cat/oldpage.* /newpage.html

Или второй вариант:

Redirect 301 /cat/oldpage http://www.site.com/newpage.php 2.2. Редирект со всех файлов.htm на.html RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)\.htm$ $1.html

Или второй вариант:

RewriteRule ^(.*)\.htm$ $1.html 2.3. Редирект всего каталога на другую страницу

С любой страницы в каталоге и подкаталогах /old/ будет происходит редирект на /new.php

RewriteRule ^old(.*)$ /new.php 2.4. Удаление лишних слэшей в адресе URL

Например, страница /catalog///stranica.html доступна и открывается. Чтобы избежать такой ситуации и не плодить бесконечное число дублей следует записать следующий редирект

RewriteCond %{REQUEST_URI} ^(.*)//(.*)$ RewriteRule . %1/%2 2.5. Реврайт без редиректа

Можно загрузить другую страницу без смены адреса страницы URL. Например, загрузим страницу /news.html , а в адресной строке будет отображаться адрес /news/happy

RewriteRule ^news/happy.* /news.html [L] 2.6. Простановка замыкающего слеша в конце адреса главной страница

Например, многие сервера работают так, что последний слэш не пишется в URL. Например, http://site.ru . Ниже приведенный код решают это проблему: сайт будет открывать по http://site.ru/

RewriteCond %{REQUEST_URI} /+[^\.]+$ RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ 2.7. Удаляем директорию каталога из URL

Например для редиректа со страницы site.com/directoriya/stranica.html на site.com/stranica.html нужно прописать следующее:

RewriteRule ^directoriya/(.+)$ http://site.com/$1

Или второй вариант:

RewriteCond %{DOCUMENT_ROOT}/directoriya/$1 -f RewriteRule ^(.*)$ directoriya/$1 2.8. Редирект GET параметров

Например, сделать редирект со страницы /?act=page&id=2 на /page-2/

RewriteCond %{QUERY_STRING} act=page RewriteCond %{QUERY_STRING} id=(\d+) RewriteRule .* /page/%1/? ] 2.9. Редирект на мобильную версию сайта m.site.ru

В данном примере сначала проверяется факт того, что пользователь открыл сайт с мобильного устройства {HTTP_USER_AGENT} , далее происходит замена адреса сайта на m.URL

RewriteCond %{HTTP_HOST} ^(.*)$ RewriteCond %{HTTP_USER_AGENT} (?i:midp|samsung|nokia|j2me|avant|docomo|novarra|palmos|palmsource|opwv|chtml|pda|mmp|blackberry|mib|symbian|wireless|nokia|hand|mobi|phone|cdm|upb|audio|SIE|SEC|samsung|HTC|mot-|mitsu|sagem|sony|alcatel|lg|eric|vx|NEC|philips|mmm|xx|panasonic|sharp|wap|sch|rover|pocket|benq|java|pt|pg|vox|amoi|bird|compal|kg|voda|sany|kdd|dbt|sendo|sgh|gradi|jb|dddi|moto|iphone|android) RewriteRule ^$ http://m.%1 2.10. Редирект с поддомена

Например, выполним редирект с любой страницы поддомена poddomen.site.ru на основной домен site.ru

RewriteCond %{HTTP_HOST} ^poddomen.site.ru$ RewriteRule ^(.*)$ http://site.ru%{REQUEST_URI} 3.Другие примеры с htaccess 3.1. Запретить IP-адрес и браузер

Запретим открывать сайт для пользователя с браузера IE с IP-адресом 172.111.222.55

RewriteCond %{HTTP_USER_AGENT} MSIE RewriteCond %{REMOTE_ADDR} ^172\.111\.222\.55$ RewriteRule ^.*$ - [F] 3.2. Запретить конкретный файл

Запретим для всех файл disable_file.html :

deny from all 3.3. Разрешить доступ с одного ip

Доступ будет разрешен только с одного ip-адреса 172.111.222.55

order deny,allow deny from all allow from 172.111.222.55 3.4. Запретить доступ с разных ip

Запретить доступ к сайту с нескольких ip-адреса 172.112.222.55, 172.113.222.55, 172.114.*.*

order deny,allow deny from all deny from 172.112.222.55 deny from 172.113.222.55 deny 172.114.*.* 3.5. Редирект в URL с больших символов на маленькие

Все большие буквы в адресе URL будут переведены на маленькие.

RewriteRule - RewriteRule ! - RewriteRule ^([^A]*)A(.*)$ $1a$2 RewriteRule ^([^B]*)B(.*)$ $1b$2 RewriteRule ^([^C]*)C(.*)$ $1c$2 RewriteRule ^([^D]*)D(.*)$ $1d$2 RewriteRule ^([^E]*)E(.*)$ $1e$2 RewriteRule ^([^F]*)F(.*)$ $1f$2 RewriteRule ^([^G]*)G(.*)$ $1g$2 RewriteRule ^([^H]*)H(.*)$ $1h$2 RewriteRule ^([^I]*)I(.*)$ $1i$2 RewriteRule ^([^J]*)J(.*)$ $1j$2 RewriteRule ^([^K]*)K(.*)$ $1k$2 RewriteRule ^([^L]*)L(.*)$ $1l$2 RewriteRule ^([^M]*)M(.*)$ $1m$2 RewriteRule ^([^N]*)N(.*)$ $1n$2 RewriteRule ^([^O]*)O(.*)$ $1o$2 RewriteRule ^([^P]*)P(.*)$ $1p$2 RewriteRule ^([^Q]*)Q(.*)$ $1q$2 RewriteRule ^([^R]*)R(.*)$ $1r$2 RewriteRule ^([^S]*)S(.*)$ $1s$2 RewriteRule ^([^T]*)T(.*)$ $1t$2 RewriteRule ^([^U]*)U(.*)$ $1u$2 RewriteRule ^([^V]*)V(.*)$ $1v$2 RewriteRule ^([^W]*)W(.*)$ $1w$2 RewriteRule ^([^X]*)X(.*)$ $1x$2 RewriteRule ^([^Y]*)Y(.*)$ $1y$2 RewriteRule ^([^Z]*)Z(.*)$ $1z$2 RewriteRule - [N] RewriteCond %{ENV:HASCAPS} TRUE RewriteRule ^/?(.*) /$1 45.4K

Послать каждый может. А вот правильно перенаправить – это целое искусство. Но еще труднее дается перенаправление пользователей на нужный путь в интернете. Для этого лучше всего подходит редирект на php .

Что за редирект?

В веб-программировании возникают ситуации, когда нужно перенаправить пользователя, переходящего по ссылке, на другой адрес. Конечно, на первый взгляд реализация такого перенаправления выглядит немного «незаконной ». На практике же, такой редирект востребован не только среди злоумышленников, но и среди честных вебмастеров:


В каких случаях может потребоваться редирект:
  • Когда происходит замена движка сайта – в результате этого меняется архитектура всего ресурса. После чего возникает проблема, как сделать редирект;
  • При перекройке структуры ресурса – происходит добавление, удаление или перенос целых разделов или одного материала. Пока происходит этот процесс, временно можно организовать перенаправление пользователя на нужный раздел;
  • Если сайт недавно сменил свое доменное имя – после смены имени домена старое еще некоторое время будет фигурировать в поисковой выдаче. В этом случае редирект пользователя на новый домен будет реализован поисковой системой автоматически;
  • В процессе авторизации – как правило, на большом сайте есть две группы пользователей: обычные посетители и администраторы ресурса. В таком случае имеет смысл реализовать редирект каждого пользователя согласно его правам и роли. После авторизации администратор или модераторы сайта попадают в административную часть ресурса, а посетители – на пользовательскую часть ресурса.
Особенности редиректа на php

В отличие от других языков php обладает некоторыми преимуществами в реализации редиректа:

  • Php является серверным языком программирования. Поэтому перенаправление будет происходить не в html коде страниц, отображаемых в браузере, а в скрипте, размещенном на сервере;
  • Редирект на php может быть реализован несколькими способами. Что во многом расширяет его применение;
  • Благодаря обработке данных на сервере перенаправление, реализованное с помощью php, менее восприимчиво к действию фильтров поисковых систем.

Для редиректа в php используется функция header() . Она применяется для отправки заголовка http . Ее синтаксис:

void header (string $string [, bool $replace = true [, int $http_response_code ]])

Принимаемые функцией аргументы:


  • string $string – строка заголовка;

Существует два типа этого аргумента. Первый предназначен для отправки кода состояния соединения. Он начинается с "HTTP/". Другой тип вместе с заголовком передает клиентскому браузеру код состояния (REDIRECT 302). Этот аргумент начинается с "Location:"

  • bool $replace – является необязательным атрибутом типа bool . Отвечает за переопределение предыдущего заголовка. Если будет задано true , то предыдущий заголовок или заголовки одного типа будут заменены. Если в аргументе задано false , то перезапись заголовка не состоится. По умолчанию, задано значение true ;
  • http_response_code – аргумент принудительно устанавливает код ответа HTTP . Установка кода пройдет успешно при условии, что аргумент string не будет пустым.

Код состояния HTTP представляет собой часть верхней строки ответа сервера. Код состоит из трех цифр, после которых идет поясняющая надпись на английском языке. Первая цифра отвечает за класс состояния. Редиректу соответствуют коды от 300 до 307. Их полное описание можно найти в соответствующей технической документации.

При использовании функции header() для редиректа внешних ссылок большое значение имеет место расположения ее вызова. В коде он должен находиться выше всех тегов html :

Применение редиректа header()

Для демонстрации действия функции на локальном сервере нужно создать два файла. Один из них назовем redirect.php , а другой redirect2.php . Внутри первого разместим вызов функции в следующем формате:

В другом файле помещаем строку:

echo "Привет! Вы находитесь в файле redirect2.php";

Еще несколько практических примеров использования редиректа на php :

  • Принудительная передача кода состояния http – при использовании первого аргумента функции header() типа «location » по умолчанию в заголовок передается код состояния «302 » (временно перемещен ). Это может стать проблемой при переносе ресурса на другое доменное имя. В поисковиках такое временное перенаправление может затянуться. Ведь поисковик постоянно анализирует код состояния. А в нем записано «временно перемещен ». Пример принудительной перезаписи кода состояния «302 » на «301 » (постоянно перемещен ):

Также перезапись возможна в два этапа. Первая строка производит перезапись кода состояния, а вторая перенаправляет на новый адрес.

6.1K

Предположим, что вы хотите, чтобы пользователям, которые переходят на страницу https://example.com/initial.php отображалась страница https://example.com/final.php . Это можно сделать с помощью несколько методов PHP , JavaScript и HTML . В этой статье мы расскажем о каждом из методов, которые можно использовать для PHP перенаправления на другую страницу.

Вот несколько переменных, которые мы будем использовать:

Использование функции PHP header() для редиректа URL-адреса

Если хотите добавить редирект с initial.php на final.php , можно поместить на веб-странице initial.php следующий код. Он отправляет в браузер новый заголовок location :

Здесь мы используем PHP-функцию header() , чтобы создать редирект. Нужно поместить этот код перед любым HTML или текстом. Иначе вы получите сообщение об ошибке, связанной с тем, что заголовок уже отправлен. Также можно использовать буферизацию вывода, чтобы не допустить этой ошибки отправки заголовков. В следующем примере данный способ перенаправления PHP показан в действии:

Чтобы выполнить переадресацию с помощью функции header() , функция ob_start() должна быть первой в PHP-скрипте . Благодаря этому не будут возникать ошибки заголовков.

В качестве дополнительной меры можно добавить die() или exit() сразу после редиректа заголовка, чтобы остальной код веб-страницы не выполнялся. В отдельных случаях поисковые роботы или браузеры могут не обращать внимания на указание в заголовке Location . Что таит в себе потенциальные угрозы для безопасности сайта:

Чтобы прояснить ситуацию: die() или exit() не имеют отношения к редиректам. Они используются для предотвращения выполнения остальной части кода на веб-странице.

При PHP перенаправлении на страницу рекомендуется использовать абсолютные URL-адреса при указании значения заголовка Location . Но относительные URL-адреса тоже будут работать. Также можно использовать эту функцию для перенаправления пользователей на внешние сайты или веб-страницы.

Вывод кода JavaScript-редиректа с помощью функции PHP echo()

Это не является чистым PHP-решением . Тем не менее, оно также эффективно. Вы можете использовать функцию PHP echo() для вывода кода JavaScript , который будет обрабатывать редирект.

Если воспользуетесь этим решением, то не придется использовать буферизацию вывода. Что также предотвращает возникновение ошибок, связанных с отправкой заголовков.

Ниже приводится несколько примеров, в которых использованы разные методы JavaScript для редиректа с текущей страницы на другую:

Единственным недостатком этого метода перенаправления на другой сайт PHP является то, что JavaScript работает на стороне клиента. А у ваших посетителей может быть отключен JavaScript .

Использование метатегов HTML для редиректа

Также можно использовать базовый HTML для выполнения редиректа. Это может показаться непрофессиональным, но это работает. И не нужно беспокоиться о том, что в браузере отключен JavaScript или ранее была отправлена ошибка заголовков:

Также можно использовать последнюю строку из предыдущего примера, чтобы автоматически обновлять страницу каждые «n » секунд. Например, следующий код будет автоматически обновлять страницу каждые 8 секунд.

Компьютер