Пошлый redirect php. Редирект с одной страницы на другую

Редирект 301 (301 Permanent Redirect) используется в нескольких случаях: при смене домена, при переносе страницы сайта, для склейки имени сайта с www и без него. Это важно для передачи Page Rank (PR) и сохранения поискового трафика.

Сам я столкнулся с его необходимостью, когда после переезда своего портала из зоны com, в ru обнаружил, что Google, Яндекс и другие поисковые системы, естественно не "забывают" старого сайта (отчасти еще и из-за того, что у меня была некорректно установлена своя страница, для обработки 404 ошибки, которая возвращала код ответа 200 OK). Более того, Google за полгода оставил для нового сайта PR=0, хотя для старого он сохранился PR=4.

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

301 редирект это наилучший метод сохранения ваших позиций в поисковых системах, когда вы переносите страницу или сайт. Код "301" интерпретируется как постоянное перемещение ("moved permanently").

  1. Простой редирект (в файле.htaccess или httpd.conf для Apache):

    Пример переадресации каталога:
    RedirectPermanent /old-directory http://www.domain.com/new-directory/

    Например, зашедших в test переадресуем на www.test.com , остальных на enter.test.com (порядок следования записей важен):

    Redirect permanent /test http://www.test.com/ Redirect permanent / http://enter.test.com/

    Примечание: для моих целей (изменение домена) хватило первого варианта простого 301 редиректа.

  2. Использование mod_rewrite (прописывается в файле.htaccess):

    Ставшая классической задача слияния имена сайта с www и без него, решается так:

    Options +FollowSymLinks RewriteEngine on RewriteCond %{HTTP_HOST} ^yoursite\.com RewriteRule ^(.*)$ http://www.yoursite.com/$1 .

    или альтернативный синтаксис:

    Options +FollowSymLinks RewriteEngine On RewriteCond %{HTTP_HOST} ^domain\.com$ RewriteRule ^(.*)$ http://www.domain.com/$1

    Обозначение означает: перенаправить клиента и отправить ему код статуса 301 (R=301) и сделать это правило последним (L).

    Редирект старого домена на новый:

    Options +FollowSymLinks RewriteEngine on RewriteRule (.*) http://www.newdomain.com/$1

    Например, если необходимо чтобы вместо rewrite.htm загружался файл rewrite.html, добавьте в.htaccess:

    RewriteEngine on RewriteBase / RewriteRule ^rewrite\.htm$ rewrite.html

    Для замены всех.htm файлов.html файлами:

    RewriteEngine on RewriteBase / RewriteRule ^(.*)\.htm$ $1.html

  3. Редирект на PHP:

    Лучше указать HTTP/1.1, так как более старые не поддерживают виртуальный хостинг. Не забудьте, что до вызова header, ничего не должно выводиться (например, echo или print). Поэтому этот код лучше ставить в начало php-скрипта. Более полный вариант php редиректа с сохранением передаваемой страницы и параметров вызова:

  4. Редирект на ASP

    <%@ Language=VBScript %> <% Response.Status="301 Moved Permanently" Response.AddHeader "Location", "http://www.new-url.com" response.end %>
  5. Редирект на ASP.NET

  6. Редирект на ColdFusion

    <.cfheader statuscode="301" statustext="Moved permanently"> <.cfheader name="Location" value="http://www.new-url.com">
  7. Редирект с помощью meta refresh

    где 0 - задержка переадресации в секундах, newdomain.com -страница, куда переадресуем. Некоторые старые браузеры не поддерживают meta refresh со значением 0, для совместимости можно установить ненулевой значение, хотя, на мой взгляд это уже не актуально. Такой редирект не сможет склеить ваши сайты (с www и без) и передать PR, так как игнорируется поисковыми системами. Он возвращает код 200 OK, что соответствует обычной странице. Эта техника популярна у спамеров, поэтому ее стоит применять только для страниц, которые не будут индексироваться.

  8. Редирект с помощью JavaScript

    Варианты переадресации на JavaScript чаще реализуются с использованием функции setTimeout("функция", задержка).

    Например, автоматически сделать Click на кнопке "Submit" формы "searchform" через 0.1 сек после загрузки кода:

    setTimeout("document.forms["searchform"].Submit.click()", 100);

    На кнопку "Submit" можно повесить любое действие, например, открыть новый url в этом окне. Кстати такое редиректы чаще встречаются при организации Дорвеев (DorWay) - браузер Пользователя будет переадресован на другую страницу, а поисковый робот, который "не понимает" JavaScript, будет индексировать эту страницу, недоступную пользователю. На ней дорвейщики размещают текст, напичканный "нужными" ключевыми словами.

    Чтобы просто переадресовать на другую страницу можно вставить после один из вариантов кода на JavaScript:

    • document.location.href="http://www.newdomain.com ";
    • window.location.reload("http://www.newdomain.com ");
    • document.location.replace("http://www.newdomain.com ");

    В последнем случае уже нельзя будет вернуться на страницу выполнившую переадресацию, так как ее адрес стирается из history, что нередко и нужною. Если нужна задержка по времени, можно оформить location="http://www.newdomain.com "; в виде функции и вставить ее в setTimeout("функция()", задержка_в_мсек); Редирект на JavaScrupt не является 301 редиректом и не передаст PR страницы, не сможет обеспечить ее склейку.

Отметим дополнительно некоторые особенности редиректов:

  • Методы редиректа с.htaccess работают только на Linux серверах, имеющих Apache с включенным модулем Mod-Rewrite.
  • Использование.htaccess создает дополнительную нагрузку на сервер Apache, более эффективно прописывать те же команды в его конфигурационном файле hpptd.conf, но, как правило, к нему нет доступа у вебмастера.
  • 301 редирект, позволяет сберечь трафик и передать PR страницы для поисковых систем (для Google точно).
  • процесс склейки и передачи PR занимает длительное времени - до нескольких месяцев и также зависит от поисковой системы, поэтому не удаляйте старую страницу или сайт, пока не произойдет окончательный перенос.
  • некоторые поисковые системы требуют для склейки сайтов дополнительных настроек, например, для Яндекса нужно дополнительно прописывать robots.txt

Заключение. Безопасный способ редиректа старых страниц на новые или старого сайта на новый адрес, с сохранением позиций в поисковых системах, заключается в использование 301 редиректа, который также позволит вам передать старый Page Rank страницы на новый сайт.


UCP Anti-Cheat - бесплатная античитерская клиент-сервер программа для защиты сервера от недобросовестных игроков.

» Теперь данные с UCP сервера будут отправлятся на сайт в раздел "Монитор"
» Добавлен новый квар ucp_monitor
» HL1. Усовершенствована система защиты античита
» HL2. Улучшена поддержка последней версии CSS
» HL2. Поддержка мода Deathmatch
» HL2. Автоматическая замена binkw32.dll

Возможности:

» Защита от изменения и подмены игровых файлов
» Защита от внедрения и изменения процесса игры
» Защита от использования скриптовых читов
» Система банов по уникальному идентификатору ПК
» Полуавтоматическая установка клиентской части
» Поддержка steam и non-steam версии игр
» Возможность снятия снимков экрана у игроков
» Отладочный режим работы для быстрого выявления проблем

Поддерживаемые игры:

» Half-Life
» Condition Zero
» Counter-Strike 1.6
» Day of Defeat
» Adrenaline Gamer
» Team Fortress Classic
» Counter-Strike Source
» MU Online
» Ragnarok Online

Установка клиентской части:

1. Запустите инсталлятор, выберите понятный вам язык и нажмите "Далее"
2. Согласитесь с условиями лицензии и нажмите "Далее"
3. Нажмите "Обзор" и выберите файл hl.exe, затем нажмите "Открыть"
4. Выберите тип игры и не забудьте добавить ключ -steam если у Вас steam версия игры либо патч 33 или выше (это билд 4156, чтобы узнать номер билда, достаточно написать в консоли игры команду version )


Значения ключей:

-steam - нужно для стим версии игры либо если патч 33 или выше
-noforcemparms - использует настройки кнопок мыши из Windows
-noforcemaccel - использует настройки акселерации мыши из Windows
-noforcemspd - использует настройки скорости мыши из Windows
-freq - выставит указанную частоту монитора при запуске игры (бесполезно для ЖК)
-w - ширина разрешения монитора (например -w 800 -h 600 устанавливает 800x600)

Если вы не снимали галочку с "Создать директорию с ярлыками на рабочем столе" , после установки у Вас на рабочем столе появиться директория Ultra Core Protector c содержимым:

ucp.log - основной файл с кодами ошибок и с информацией о конфигурации компьютера.

ucp.ini - файл настроек запуска игры.


Priority=2 - режим приоритета для процесса игры:
низкий - 1
средний - 2
высокий - 3
реального времени - 4
ниже среднего - 5
выше среднего - 6

Game=Counter-Strike - тип игры (Half-Life, Counter-Strike, Condition-Zero, Day of Defeat, Team Fortress, Counter-Strike Source)

Language=1 - язык, на котором будут отображаться ошибки (0 - английский, 1 - русский)

Parameters=-nojoy -nomaster -nointro - параметры запуска игры, чтобы задать параметры запуска игры, их необходимо указывать в свойстве ярлыка "Рабочий стол\Ultra Core Protector\Counter-Strike" .

ucp.dbg - файл, куда будет сохранена информация при запуске античита в отладочном режиме.

Debug Mode - отладочный режим работы античита для выявления проблем.

Counter-Strike - отныне для запуска игры с античитом воспользуйтесь данным ярлыком.

Для установки на лицензионные версии игр, необходимо указать директорию "steam\steamapps\\counter-strike\" , и перед запуском античита необходимо сначало запустить steam.

Установка для HL1:

» Для работы античита на сервере должен быть установлен AMX Mod X последней версии
» Скопировать ucp.amxx в директорию addons/amxmodx/plugins/
» В addons/amxmodx/configs/plugins.ini добавить строчку ucp.amxx
» Скопировать ucp.cmd в корневую директорию мода игры, где liblist.gam
» Скопировать banlist.txt, config.cfg, cvarlist.txt, detectlist.txt и filelist.txt в директорию addons/amxmodx/configs/ucp/
» Скопировать ucp.txt в директорию addons/amxmodx/data/lang/
» Если у Вас на сервере установлен модуль dproto ниже версии 0.4.8, то для совместимости с античитом, необходимо в его конфиге dproto.cfg найти строку ValidInfoFields_Engine и добавить в конец строки \*ucp_id

Установка для HL2:

» Для работы античита на сервере должен быть установлен последней версии
» Скопировать ucp.smx в директорию addons/sourcemod/plugins/
» Скопировать ucp.cmd в корневую директорию мода игры, где gameinfo.txt
» Скопировать banlist.txt, config.cfg, cvarlist.txt, detectlist.txt и filelist.txt в директорию cfg/ucp/
» Скопировать ucp.phrases.txt в директорию addons/sourcemod/translations/

Примечание:

» Чтобы со steam клиентов смогли заходить на сервер, необходимо отключить VAC , для этого необходимо добавить ключ -insecure в строку запуска серверной части.
» Чтобы автоматически установить и запустить античит у игроков заходящих без античита, необходимо добавить строку
Установить в основной motd.txt серверной части. После того как игрок кликнет на ссылку Установить , игра выгрузиться и запуститься через античит. Также следует предупредить игроков, чтобы и в преть запустить игру с античитом, необходимо запустить игру с файла ucp.exe из корневой директории игры.

Предназначения файлов:

config.cfg - файл конфигурации античита.
banlist.txt - идентификаторы забаненных юзеров.
ucp.cmd - оригинальный файл текущей клиентской части, служит для идентификации и автообновления.
filelist.txt - список файлов для проверки с теми, что на сервере. Ни больше 100 строк.
cvarlist.txt - список квар, значения которых выставляются принудительно. Ни больше 50 строк. (по умолчанию список квар для Counter-Strike). (Только для HL1)
ucp.txt - серверные сообщения на разных языках для HL1.
ucp.phrases.txt - серверные сообщения на разных языках для HL2.
detectlist.txt - список сигнатур нежелательного ПО на стороне клиента. Ни больше 50 строк. Синтаксис:

Вид поиска:

[P] - искать по названию процесса
[W] - искать по классу окна
[D] - искать по названию драйвера

Действия:

[M] - показывать сообщение
[K] - выгрузить процесс
[B] - bsod

Пример:

[W][K]viral
[W][B]ollydbg
[D][M]ntice.sys Need close SoftIce and restart PC

Команды:

ucp_ban - банит на локальном сервере игрока по уникальному идентификатору компьютера. Если время бана не указана, либо указан 0, то банит навечно.

ucp_banid - ставит бан на локальном сервере по введенному идентификатору. Если время бана не указана, либо указан 0, то банит навечно.

ucp_unban - снимает бан на локальном сервере по введенному идентификатору.

ucp_banlist - показывает таблицу забаненных идентификаторов.

ucp_banlist_file - путь до файла, где хранятся идентификаторы забаненных юзеров (По умолчанию "0").

ucp_version - показывает текущую версию античита.

ucp_who - показывает список игроков на сервере.

ucp_screen - снимает скриншот с игрока и отправляет на сервер в формате jpg по выбранному протоколу. Второй параметр нужен только в режиме HTTP, чтобы посмотреть скриншот не выходя из игры.

ucp_autoscreen - снимает скриншот с игрока по заданному интервалу времени (посекундно). Минимальная периодичность должна быть не ниже 60 секунд (По умолчанию "0").

ucp_mode - вкл/выкл плагина античита без перезапуска сервера (По умолчанию "1").

0 - плагин выключен
1 - плагин включен

ucp_checkfile_mode - вкл/выкл проверки файлов из filelist.txt (По умолчанию "1").

0 - опция выключена
1 - опция включена, при нахождении неоригинальных файлов удаляет их и кидаю новую
2 - опция включена, при нахождении неоригинальных файлов выгружает игру с сообщением, что необходимо переустановить игру

ucp_upload_mode - протокол, по которому будут отправлены скрины на сервер (По умолчанию "FTP").

FTP - File Transfer Protocol
HTTP - HyperText Transfer Protocol
LOCAL - передать скрины на локальный сервер (должен быть установлен плагин UCP Screen Uploader)

ucp_upload_host - HOST или IP адрес сервера куда будут отправлены скрины (без www, http:// и ftp://) , если http или ftp сервер находится на том же сервере, что и сама игра, и у сервере есть внутренний и внешний адрес, то лучще задать вместо адреса знак "+" , в этом случае скрины с внешних игроков будут отправляться на внешний адрес сервера, а с внутренних на внутренний.

ucp_upload_port - PORT сервера.

ucp_upload_user - логин для идентификации на FTP сервере.

ucp_upload_pass - пароль для идентификации на FTP сервере.

ucp_upload_path - директория или php скрипт, куда будут закачиваться скриншоты.

ucp_build - номер или номера билдов, с которых разрешается входить на сервер (По умолчанию "0", т.е. опция выключена). Можно указывать как один билд "4156" так и несколько "3779;3939;3248;3266". Античит узнает следующие билды:

2834, 3147, 3210, 3248, 3266, 3329, 3382, 3647, 3779, 3939, 4156, 4381, 4554
3048, 3152, 3264, 3224, 3698, 3945, 4044, 4248

ucp_cpurl - возможность показывать свой баннер в поле Content hosting provided by: при соединении к серверу (По умолчанию "0", т.е. опция выключена). Необходимо создать html файл, например cs.html , записать туда следующий код:





где cs.jpg Ваш баннер с размерами 340х56. Затем залить cs.html , cs.jpg на свой http сервер и указывать тут http://Ваш адрес/cs.html

ucp_detect_mode - вкл/выкл сканирования нежелательного ПО на стороне игрока (По умолчанию "1").

0 - проверка выключена
1 - проверка включена

ucp_detect_time - интервал в секундах для сканирования нежелательного ПО с начала входа игрока (По умолчанию "0", т.е. сканируется только при входе на сервер).

ucp_link - ссылка на античит, которую будет показывать при кик-сообщении.

ucp_redirect_mode - вкл/выкл функции перенаправления игроков зашедших без античита (По умолчанию "0", т.е. функция отключена).

0 - перенаправление выключена
1 - перенаправление включена

ucp_redirect_wan - внешний адрес сервера, куда будут перенаправлены игроки без античита зашедшие из интернета.

ucp_redirect_lan - локальный адрес сервера, куда будут перенаправлены игроки без античита зашедшие из внутри сети.
socket_hz .

» Upload Screens - простой php скрипт для приёма скринов на http cервер.

» ATAC + UCP - интегрированный плагин "контроль нападений игроков на свою команду" для наказания по уникальному идентификатору UCP.

Код состояния HTTP (англ. HTTP status code) со статусом 301 Moved Permanently (Перемещено окончательно) свидетельствует о том, что запрошенный документ был окончательно перенесен на новый URI, указанный в поле Location заголовка.

Для чего это нужно?

В первую очередь, при изменении доменного имени сайта, необходимо оповестить поисковые системы о смене адреса сайта. Во-вторых, для склейки имени сайта с www и без него. В-третьих для быстрой передачи Page Rank на новый сайт.

PHP

Способ первый

Способ второй

Perl

Способ первый

$cgi = new CGI; print $cgi->redirect("http://www.example.com/");

Способ второй

#!/usr/bin/perl -w use strict; print "Status: 301 Moved Permanently\n"; print "Location: http://www.example.com/\n\n"; exit;

ASP.NET

Способ первый

Способ второй (с версии 4.0)

RedirectPermanent("http://www.example.com");

ASP

<%@ Language=VBScript %> <% Response.Status="301 Moved Permanently" Response.AddHeader "Location", "http://www.example.com/" response.end %>

Ruby on Rails

def do_something headers["Status"] = "301 Moved Permanently" redirect_to "http://www.example.com/" end

ColdFusion

<.cfheader statuscode="301" statustext="Moved Permanently"> <.cfheader name="Location" value="http://www.example.com">

Java (JSP)

<% response.setStatus(301); response.setHeader("Location", "http://www.example.com"); response.setHeader("Connection", "close"); %>

Веб-сервер Apache (.htaccess)

Способ первый (mod_alias, Redirect)

Redirect 301 / http://www.example.com

Способ второй (mod_alias, RedirectPermanent)

RedirectPermanent / http://www.example.com

Способ третий (mod_alias, Redirect permanent)

Redirect permanent / http://www.example.com

Способ четвертый (mod_alias, RedirectMatch)

RedirectMatch 301 ^(.*)$ http://www.example.com/

Способ пятый (mod_rewrite)

Options +FollowSymLinks RewriteEngine On RewriteBase / RewriteRule ^(.*)$ http://www.example.com/$1

Послать каждый может. А вот правильно перенаправить – это целое искусство. Но еще труднее дается перенаправление пользователей на нужный путь в интернете. Для этого лучше всего подходит редирект на 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 » (постоянно перемещен ):

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

  • Использование редиректа внешних ссылок для перенаправления в зависимости от роли пользователя. Роль определяется во время процедуры аутентификации. Значение для обработки записывается в переменную $who :

  • Упрощенный практический пример реализации редиректа внешней ссылки – клик по ссылке ведет на страницу php . Отсюда пользователя через 5 секунд перекидывает на Рамблер. Код html :

Нажми меня

Код файла redirect3.php :

Ну, вот мы и научились основам редиректа на php. Теперь можно смело браться за перенаправление пользователей в нужное русло. Главное не ошибиться в направлении, а то приведете всех своих юзеров на чужой сайт…