Как в php реализовать переход на другую страницу?
Содержание:
- Как сделать редирект
- Использование функции PHP header() для редиректа URL-адреса
- Что такое редирект простыми словами
- Другие настройки (CGI, Python, Node.js)
- Перенаправление с HTTP на HTTPS для вашего сайта
- Примеры использования 301 редиректа
- Способ 2. htaccess-редирект
- Альтернативные методы переадресации
- В каких случаях используется постоянный редирект 301
- Один (а не два последовательных!) 301 редирект на c www и со слешем на конце адреса страницы
- Настройка кириллических доменов .РФ
- 301 редирект с одного домена на другой
- Редирект на папки со слешем на конце
- Редирект на папку без слеша — убираем слеш на конце
- Редирект со всех страниц кроме определенной папки
- Редирект с index.php на корень сайта
- Переадресация с поддомена на основной домен
- Редирект страницы из различных директорий
- Создаем ЧПУ-копию динамических страниц
- Переадресация с https на http
- Настройка ответа 403 для спама по REFERER
- Обработка ошибки 404 в .htaccess
- Переписывание URL-адреса
- Автоматическое JavaScript-перенаправление на другую страницу
- Как отменить магическое действие magic quotes?
- Примеры 301 редиректов в .htaccess
- 2.1. Редирект с одной страницы на другую
- 2.2. Редирект со всех файлов .htm на .html
- 2.4. Удаление лишних слэшей в адресе URL
- 2.5. Реврайт без редиректа
- 2.6. Простановка замыкающего слеша в конце адреса главной страница
- 2.8. Редирект GET параметров
- 2.9. Редирект на мобильную версию сайта m.site.ru
- 2.10. Редирект с поддомена
- Редирект в PHP
Как сделать редирект
Ниже разберём несколько ситуаций, в которых владельцы сайтов чаще всего используют опцию редиректа.
C http на https
Из-за повсеместного переезда на https необходимость в этом редиректе возникает у многих. Для настройки через файл htaccess или PHP нужно использовать следующий код:
RewriteEngine On
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI)
C или на www
Этот редирект также очень важен для SEO, ведь с точки зрения поисковых систем страницы с префиксом www и без него являются разными и, соответственно, дублями.
Для выполнения настройки рекомендуется использовать специальные программы для генерации кодов редиректа, коих в Интернете существует множество, и сделать её через файл htacess.
Настройка перенаправления с одной страницы
Для выполнения этой операции действия нужно осуществлять по похожей схеме. Сначала сгенерировать код, после чего добавить его в файл htaccess или index.php. Если сайт работает на WordPress, можно воспользоваться плагинами, например, Simple 301 Redirects или Redirect.
Настройка редиректа при смене домена
В этом случае схема будет похожей, только в программах для генерации кода нужно получить постраничный редирект. Для этого потребуется ввести URL старого и нового сайта, а затем отметь нужные поля. Далее код также нужно добавить в файлhtacess или PHP.
Редирект папки
Можно задать и редирект для всей папки, то есть каталога. Это нужно, например, при создании подразделов, в том случае, если они отображаются в адресе страницы. Например, в раздел томаты на огородном сайте, имеющий ссылку примерного вида gardensampleblog.ru/tomaty/zheltye добавляется новый раздел «Томаты Черри», а ссылка получает следующий вид https://gardensampleblog.ru/cherry/zheltye.
Стандартный код для файла htacess в этом случае будет выглядеть следующим образом:
RedirectMatch 301 ^/tomaty/(.*)$ /cherry/$1
Использование функции PHP header() для редиректа URL-адреса
Если хотите добавить редирект с initial.php на final.php, можно поместить на веб-странице initial.php следующий код. Он отправляет в браузер новый заголовок location:
<?php $new_url = 'https://example.com/final.php'; header('Location: '.$new_url); ?>
Здесь мы используем PHP-функцию header(), чтобы создать редирект. Нужно поместить этот код перед любым HTML или текстом. Иначе вы получите сообщение об ошибке, связанной с тем, что заголовок уже отправлен. Также можно использовать буферизацию вывода, чтобы не допустить этой ошибки отправки заголовков. В следующем примере данный способ перенаправления PHP показан в действии:
<?php ob_start(); $new_url = 'https://example.com/final.php'; header('Location: '.$new_url); ob_end_flush(); ?>
Чтобы выполнить переадресацию с помощью функции header(), функция ob_start() должна быть первой в PHP-скрипте. Благодаря этому не будут возникать ошибки заголовков.
В качестве дополнительной меры можно добавить die() или exit() сразу после редиректа заголовка, чтобы остальной код веб-страницы не выполнялся. В отдельных случаях поисковые роботы или браузеры могут не обращать внимания на указание в заголовке Location. Что таит в себе потенциальные угрозы для безопасности сайта:
<?php $new_url = 'https://example.com/final.php'; header('Location: '.$new_url); exit(); ?>
Чтобы прояснить ситуацию: die() или exit() не имеют отношения к редиректам. Они используются для предотвращения выполнения остальной части кода на веб-странице.
При PHP перенаправлении на страницу рекомендуется использовать абсолютные URL-адреса при указании значения заголовка Location. Но относительные URL-адреса тоже будут работать. Также можно использовать эту функцию для перенаправления пользователей на внешние сайты или веб-страницы.
Что такое редирект простыми словами
Редирект (англ. «Redirect») — это автоматическое перенаправление пользователей с одной страницы сайта на другую, причём как в пределах одного проекта, так и на внешние. Для поисковых систем редирект применяется для склейки адресов страниц.
У каждого редиректа есть свой номер, который отвечает за его функцию. Выделяют следующие виды:
- 300 редирект — множественный выбор;
- 301 редирект — перемещен навсегда;
- 302 редирект — документ найден;
- 303 редирект — смотри другое;
- 304 редирект — документ не изменился;
- 305 редирект — используй прокси;
- 306 редирект — не используется;
- 307 редирект — временный редирект;
Лидером использования является 301 редирект. Он используется, когда адрес страницы сайта изменился навсегда. Как показывает практика — это наиболее часто встречающаяся ситуация. Во всех примерах ниже, как раз будет именно он.
Существует несколько способов сделать редирект. У каждого есть свои плюсы и минусы. Ниже мы рассмотрим каждый из них в отдельности с примерами.
Другие настройки (CGI, Python, Node.js)
Директивы SSI (Server Side Includes) по умолчанию обрабатываются в файлах с расширением .shtml (например, index.shtml). Чтобы SSI обрабатывались и в других файлах, необходимо в файле .htaccess указать типы этих файлов:
Вместо «.ssi .html» укажите расширения файлов, в которых должны обрабатываться директивы SSI. Использовать в одном и том же файле PHP и SSI одновременно не рекомендуется.
Чтобы CGI/Perl-скрипты выполнялись в браузере, необходимо создать файл .htaccess и добавить в него строки:
Вместо «.cgi .pl» укажите список расширений, которые должны обрабатываться веб-сервером. Убедитесь, что у вас есть права на исполнение этих скриптов (например, 755). А в переменных PERL5LIB и LD_LIBRARY_PATH, которые указывают веб-серверу, откуда подгружать модули Perl, вместо login вставьте свой логин.
Проектам на языке Python необходим файл .htaccess с таким содержанием:
Вместо site.wsgi укажите входной файл вашего приложения.
Чтобы обрабатывать скрипты Node.js, укажите в .htaccess следующие директивы:
Замените example.com на основное имя вашего сайта, а login на логин вашего аккаунта.
Если вы не нашли ответа на свой вопрос в этом разделе, то вы всегда можете обратиться к нам за помощью через форму обратной связи в разделе «Поддержка» Панели управления.
Перенаправление с HTTP на HTTPS для вашего сайта
Следующий код заставляет любой http-запрос быть переписанным с использованием https. Например, следующий код заставляет запрос к загружать . Он также заставляет напрямую связанные ресурсы (изображения, css и т.д.) использовать https:
RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} Header always set Content-Security-Policy "upgrade-insecure-requests;"
Если это не работает, сначала проверьте окончания строк. Копирование/вставка из веб-браузера в текстовый редактор может работать неправильно, поэтому после вставки в текстовый редактор необходимо удалить каждый перенос строки и добавить его обратно.
Примеры использования 301 редиректа
Редирект с index.php на главную
Чтобы настроить его вам нужно прописать в вашем файле следующий код, который будет перенаправлять посетителей с адреса site.ru/index.php на site.ru:
RewriteCond %{THE_REQUEST} ^{3,9}\ /index\.php\ HTTP RewriteRule ^index\.php$ http://site.ru/
Если вам так же нужно сделать переадресацию с index.html, то просто в коде выше замените .php на .html
Склеиваем алиасы сайта
Если у вас несколько доменов и вы хотите все их перенаправлять на основной сайт, то используем:
RewriteCond %{HTTP_HOST} ^vash-sait.com$ RewriteCond %{HTTP_HOST} ^www.vash-sait.com$ RewriteCond %{REQUEST_URI} !^/robots.* RewriteRule ^(.*)$ http://vash-sait.ru/$1
Обратите внимание на первые 2 строки, там указано зеркало в зоне .com, если у вас иная или несколько зон, то добавляем правила
Редирект с www на без www
Этот способ я уже описывал ранее, но повторюсь. Для того, чтобы склеить зеркала и выбрать основным домен без www прописываем:
RewriteCond %{HTTP_HOST} ^www.site\.ru$ RewriteRule ^(.*)$ http://site.ru/$1
Редирект с домена без www на домен с www
Это действие противоположное предыдущему, только основное зеркало здесь www.site.ru:
RewriteCond %{HTTP_HOST} ^site\.ru$ RewriteRule ^(.*)$ http://www.site.ru/$1
301 редирект страниц со слэшем и без
Это еще один вид дублей, тут мы склеим страницы site.ru/category/ и site.ru/category, как видите, в конце второго урла не стоит слэша:
RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} ^(.+)/$ RewriteRule ^(.+)/$ /$1
Если вам нужно наоборот оставить слэш в конце урла, то вам нужен данный вариант:
RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*)$ $1/
Если у вас по какой-то причине появились урлы типа site.ru/category//article.html, то юзаем код:
RewriteCond %{REQUEST_URI} ^(.*)//(.*)$ RewriteRule . %1/%2
где, «//» можно заменить на «—» или любые сдвоенные символы в урле.
Массовая замена категории
Бывает, что вы переименовали категорию, а за ней закреплены тысячи урлов. Чтобы не состарится во время написания тысяч одинаковых перенаправлений юзаем:
RewriteRule ^(.*)/old-category/(.*)$ $1/new-category/$2
Если у вас категория идет сразу после домена (типа site.ru/category/), то используем другой вариант:
RewriteRule old-category /(.*) / old-category /$1
Редирект на новую страницу
Самый простой редирект со страницы на страницу, для это просто пропишите так:
Redirect 301 /old-post.html http://new-site.ru/new-post.html
Где old-post.html — это ваша старая страница, а new-site.ru/new-post.html — это новая страница и она может быть на любом домене (включая ваш текущий домен).
Редирект для url с параметрами
Страницы с параметрами редиректятся сложнее, возьмем пример http://site.ru/page.php?sort=articles. Параметр здесь «sort=articles». Код будет следующим:
RewriteCond %{QUERY_STRING} sort=articles RewriteRule .* http://site.ru/page.php?
Работаем с расширениями
Убираем .html из url (для удаления .php не забудьте заменить $1.html на $1.php):
RewriteRule ^((+/)*+)$ /$1.html
Меняем .php на .html в урлах и наоборот (не забываем поменять местами в коде):
RedirectMatch 301 (.*)\.php$ http://www.site.com$1.html
Способ 2. htaccess-редирект
Этот редирект делается простым помещением файла .htaccess в папку где нужно сделать редирект.
Например, редирект любого url (из папки где .htaccess) на нужный адрес, вот содержимое .htaccess:
RewriteEngine On RewriteRule (.*) //leonov-do.ru/ |
Возможны более сложные редиректы, но такой вариант по своей сути — такой же как и header-редирект (если указывается внешний URL). Возможны вариант переадресации файла — вместо (.*) указать к примеру имя go — будет редиректить адрес go и т.п. Можно указать в одном файле несколько строчек RewriteRule подряд с разными правилами — тогда не нужно писать каждый раз RewriteEngine On.
Альтернативные методы переадресации
- Редирект 302. Применяется в случае временной переадресации с одного url на другой. При его использовании поисковая система индексирует все доступные версии сайта или страницы. Объединения ссылочного веса и внутренних метрик на приоритетном ресурсе не происходит.
- 307 Temporary Redirect рекомендуется применять в исключительных случаях. Например, при техническом обслуживании сайта, когда он недоступен некоторое время.
- Обновления Meta Refresh выполняют переадресацию не на уровне сервера, а непосредственно на сайте. Пользователь сталкивается с временной задержкой (обычно около пяти секунд), после чего для перехода на нужную страницу должен принудительно запустить определенную команду. Этот метод часто приводит к падению посетительского интереса и проседанию поисковых индексов.
- Редирект rel=«canonical». Позволяет сохранить доступ посетителям ресурса к контенту дублирующихся страниц. При этом для поисковиков наличие команды canonical на одной из страниц говорит о том, что только она подлежит индексации в поиске.
В большинстве случаев постоянная переадресация является более правильным решением, чем временная. На практике это объясняется просто. Предположим, сайт сменил доменную зону, а затем еще и обзавелся защищенным протоколом https. При настройке временной переадресации в индексе Яндекса и Google по одним и тем же запросам появились три версии сайта с пропорциональным проседанием позиций в выдаче. После настройки редиректа 301 на приоритетный url произошло склеивание дублей, робот вернул сайт в топ выдачи.
Не рекомендуется использовать постоянный редирект при временном переносе сайта или наличии серьезных проблем со старым доменным именем. Если адрес забанен или попал под поисковую фильтрацию, смена дислокации с применением переадресации не поможет избавиться от этих ограничений.
В каких случаях используется постоянный редирект 301
-
Смена доменного имени, перенос сайта. Необходимо произвести тотальную настройку переадресации со старого адреса на новый, чтобы все без исключения запросы к old_site.ru перенаправлялись на new_site.ru.
-
Изменение написания url определенных страниц в целях SEO-продвижения, смены CMS или по иным причинам. Требуется настроить редирект с site.ru/1hdkr5 на site.ru/page_adress.
-
Перенос разделов на субдомены. Необходимо сменить адрес www.site.ru/example на example.site.ru.
-
Для аккумуляции трафика с адресов, купленных в разных доменных зонах, на один приоритетный ресурс.
-
Исключение дублирующихся страниц из индекса.
-
Склейка зеркал сайта – вариантов сайта с идентичным контентом, но разным написанием адресов: site.ru, www.site.ru, https://site1.ru и т.д. В этом случае выбирается один приоритетный домен и на него настраивается редирект со всех остальных зеркал.
-
Удаление ранее существовавшей страницы. В этом случае пользователи обычно видят ошибку 404. Большое количество таких сообщений негативно воспринимается как пользователями, так и поисковиками.
-
Для быстрого перехода пользователя на мобильную версию ресурса со смартфонов и планшетных устройств.
Один (а не два последовательных!) 301 редирект на c www и со слешем на конце адреса страницы
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ http://www.%1/$1/
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^(.*)$
RewriteRule ^(.*)$ http://www.%1/$1/
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !$
RewriteCond %{HTTP_HOST} ^(.*)$
RewriteRule ^(.*)$ http://www.%1/$1
Настройка кириллических доменов .РФ
Правила и логика работы с доменами на кириллице абсолютно такие же, единственным отличием является замена символов кириллицы на специальный код.
301 редирект с одного домена на другой
RewriteCond %{HTTP_HOST} ^oldmysite\.ru$ RewriteRule ^(.*)$ http://newmysite.ru/$1
Правило для доменов .РФ
RewriteCond %{HTTP_HOST} ^xn-...\.xn--p1ai$ RewriteRule ^(.*)$ http://mysite.ru/$1
Редирект на папки со слешем на конце
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !\..{1,10}$ RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*)$ http://mysite.ru/$1/
Редирект на папку без слеша — убираем слеш на конце
RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} ^(.+)/$ RewriteRule ^(.+)/$ http://www.site.ru/$1
Редирект со всех страниц кроме определенной папки
Для примера возьмем в исключение папку панели администратора в CMS Bitrix
RewriteRule ^bitrix/ /bitrix/admin/ RewriteRule ^(.*)$ http://mysite.ru/
Редирект с index.php на корень сайта
RewriteCond %{THE_REQUEST} ^{3,9}\ /index\.php\ HTTP/ RewriteRule ^index\.php$ http://mysite.ru/
Переадресация с поддомена на основной домен
RewriteCond %{HTTP_HOST} ^abc.mysite.ru$ RewriteRule ^(.*)$ http://mysite.ru%{REQUEST_URI}
Редирект страницы из различных директорий
Если в разных папках сайта лежит файл с одинаковым названием, то настроить переадресацию этих файлов на один.
RewriteRule /nash-file.php /nash-file.php
Создаем ЧПУ-копию динамических страниц
Для страницы появится обычный URL без передачи Get-параметров.
RewriteRule ^catalog/okno/?$ /firma/okna/detail.php?ID=123
Переадресация с https на http
Необходимое правило для решения проблемы с дублями страниц в поисковых системах.
RewriteCond %{HTTPS} "on" RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI}
Настройка ответа 403 для спама по REFERER
Данное правило позволяет не пускать на сайт спамный трафик с других сайтов:
RewriteCond %{HTTP_REFERER} ref-spam-site.ru RewriteCond %{HTTP_REFERER} another-ref-spam.ru RewriteRule .* -
Обработка ошибки 404 в .htaccess
Для поисковых систем очень важно получать код ответа 404 для несуществующих страниц
ErrorDocument 404 /404-for-me.php
Переписывание URL-адреса
Этот пример переписывает URL в другой URL. В результате переписывается в .
Options +FollowSymLinks RewriteEngine On RewriteRule ^(+).html /abc.php?id=$1
Ниже приведены пояснения к вышеуказанным правилам:
- (+)
- Ищет любые цифры повторяющуюся 1 или более раз.
- (*)
-
Ищет любые строчные буквы и знак , 0 или более раз. Если нужно, чтобы поддерживались и прописные буквы, используйте . Например:
RewriteRule ^place/(*).html /place/abc.php?id=$1
- Делает сценарий последним выполненным правилом в htaccess. Т.е. если это правило сработало, то немедленно происходит редирект и никакой код ниже не выполняется.
mod-rewrite cheat sheet
Автоматическое JavaScript-перенаправление на другую страницу
Если нужно автоматически перенаправить пользователя с одной страницы (URL1) на другую страницу (URL2), можно использовать следующий код:
window.location.href = 'URL2';
Необходимо вставить приведенный выше код на первую страницу (URL1). Замените URL2 на нужный адрес страницы. Лучше поместить этот код внутри элемента <head> (а не в нижней части страницы), чтобы страница перенаправлялась до того, как браузер начинает ее отображать.
СОВЕТ: Если вы используете встроенный JavaScript (т.е. без внешнего файла .js), не забудьте поместить код JavaScript в теги <script></script>.
Перенаправление на другую страницу через X секунд
В этом примере мы будем осуществлять js редирект на другую страницу через некоторое время после загрузки страницы. Например, если нужно перенаправить посетителя на главную страницу после отображения страницы приветствия в течение 5 секунд:
setTimeout(function(){ window.location.href = 'homepage-url'; }, 5 * 1000);
Необходимо вставить приведенный код JavaScript на странице приветствия. Не забудьте заменить homepage-url на URL-адрес домашней страницы.
Мы использовали метод setTimeout, чтобы указать скрипту выполнить перенаправление через 5 секунд (умножаем 5 на 1000, чтобы преобразовать секунды в миллисекунды).
СОВЕТ: В JavaScript значения времени всегда рассчитываются в миллисекундах.
Перенаправление на другую страницу, исходя из условия
Например, можно выполнить перенаправление в зависимости от браузера посетителя (хотя это не рекомендуется), размера экрана, времени суток, или другого условия.
Используйте следующий код для перенаправления посетителей, которые удовлетворяют определенному условию:
if (CONDITION) { window.location.href = 'redirect-url'; }
Например, этот код перенаправляет посетителей на другую страницу, если ширина их экрана меньше 600 пикселов:
if (screen.width < 600) { window.location.href = 'redirect-url'; }
Перенаправление на другую страницу на основе действий пользователя
Последний пример демонстрирует, как перенаправить посетителя, основываясь на его действиях. Вы можете привязать js редирект к любому типу действия пользователя. В данном примере для простоты мы будем обрабатывать нажатие кнопки.
Следующий код будет перенаправлять посетителя на целевую страницу после нажатия на #mybutton:
document.getElementById('mybutton').onclick = function() { window.location.href = 'redirect-url'; };
Можно сделать то же самое, используя следующий код:
<button onclick="window.location.href = '/'">Go to Homepage</button>
Также можно связать перенаправление с любым событием или действием пользователя. Только не забудьте удостовериться, что ваши редиректы не вызовут разочарования пользователей.
Я попытался рассмотреть все возможные случаи js редиректа на другую страницу. Если я когда-либо столкнусь с другими сценариями, я добавлю их в эту статью.
Данная публикация является переводом статьи «Redirect to Another Page with JavaScript» , подготовленная редакцией проекта.
Как отменить магическое действие magic quotes?
При включенной директиве конфигурации magic_quotes_gpc PHP автоматически добавляет слеши к строковым значениям в массиве $GLOBALS (это относится не только к данным в $_POST, $_GET, $_COOKIE, $_REQUEST, но и к данным в $_SERVER, $_FILES, $_ENV, $_SESSION). В добавок, при включенной директиве magic_quotes_runtime, слеши добавляются к данным полученым во время работы скрипта (например, из файла, базы данных). И как показывает практика, зачастую, эта магия оказывается «медвежьей» услугой. Проще всего, конечно, отключить директивы в php.ini или через .htaccess, прописав php_flag magic_quotes_gpc 0 и php_flag magic_quotes_runtime 0, однако если нужно создать приложение, которое независит от настроек PHP, тогда нужно выполнить ряд антимагических действий вручную. С magic_quotes_runtime все просто, для его отключения в начале скрипта прописываем set_magic_quotes_runtime(0); и все, а для magic_quotes_gpc нужны заклинания более суровые: нужно проверить состояние директивы magic_quotes_gpc и если она включена, пробежаться по глобальным массивам и сделать stripslashes, например так как показано ниже.
if ( get_magic_quotes_gpc() ) { function stripslashes_deep($value) { if( is_array($value) ) { $value = array_map('stripslashes_deep', $value) } elseif ( !empty($value) && is_string($value) ) { $value = stripslashes($value); } return $value; } $_GET = stripslashes_deep($_GET); $_POST = stripslashes_deep($_POST); $_COOKIE = stripslashes_deep($_COOKIE); $_REQUEST = stripslashes_deep($_REQUEST); $_SESSION = stripslashes_array($_SESSION); $_SERVER = stripslashes_deep($_SERVER); $_FILES = stripslashes_deep($_FILES); $_ENV = stripslashes_deep($_ENV); }
P.S.: В 6 версии PHP от магических закавычиваний отказались и оставленные в целях обратной совметимости get_magic_quotes_gpc и get_magic_quotes_runtime будут всегда возвращать false.
Примеры 301 редиректов в .htaccess
Мы уже рассматривали множество примеров с редиректом по в статьях:
- 301 редирект для удаления/добавления слэша в конце URL
- 301 редирект с index (.html и .php) на корень сайта «/»
- Редирект 301 с http на https
- Редирект 301 с www на без www
- Смена адреса сайта — редирект со старого домена на новый
Здесь мы дополним варианты редиректов, которых еще не было.
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
С любой страницы в каталоге и подкаталогах /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
2.6. Простановка замыкающего слеша в конце адреса главной страница
Например, многие сервера работают так, что последний слэш не пишется в URL. Например, http://site.ru. Ниже приведенный код решают это проблему: сайт будет открывать по http://site.ru/
RewriteCond %{REQUEST_URI} /++$ RewriteRule ^(.+)$ %{REQUEST_URI}/
Например для редиректа со страницы 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
В данном примере сначала проверяется факт того, что пользователь открыл сайт с мобильного устройства , далее происходит замена адреса сайта на 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}
Редирект в PHP
В php есть функция , которая разрешает не только подменять стандартные заголовки, но и добавлять новые.
Синтаксис:
// string - полностью сформированная строка заголовка, который необходимо добавить (без завершающего перевода строки "\n") // replace указывает, нужно ли заменять заголовки с одинаковыми именами (true), или же добавлять в конец (false) // http_response_code указывает код http-ответа (300, 301, 302 и т.д.) void header ( string string ] );
Примеры использования:
header( 'Refresh: 0; url=/error404.html' ); // переадресовать на страницу ошибки немедленно (без задержки) header( 'Refresh: 5; url=https://www.google.com/' ); // переадресовать на главную страницу Рамблера через 5 секунд после загрузки страницы. header( 'Location: /', true, 307 ); // перебросить на главную страницу сайта с использованием 307 редиректа. header( 'Location: /article/page.htm', true, 303 ); // с помощью 303 редиректа переадресовать на внутреннюю страницу сайта. header( 'Location: http://google.ru/search?q=redirect' ); // с помощью 302 редиректа переадресовывать на поиск в гугле слова redirect (При использовании Location без указания кода редиректа, по умолчанию используется 302-й). header( 'Location: http://yandex.ru/yandsearch?text=redirect', true, 301 ); // сделать переадресацию с помощью 301 редиректа на поиск в Яндексе слова redirect.
Редирект HTML в PHP:
<?php echo '<meta http-equiv="refresh" content="5;URL=https://ida-freewares.ru">';
Второй вариант, аналогичный по смыслу, но может быть полезным, если установка кода и редирект должны осуществляться в разных местах:
header('HTTP/1.1 301 Moved Permanently'); header('Location: http://site.com/');
Первая строка указывает код http, а вторая, собственно, задает адрес. В большинстве случаев, проблем не возникнет. Однако, если у вас используется режим , то вместо может потребоваться написать .