Думка redirect php. Як зробити редирект. Всі види. Висновок коду JavaScript-редиректу за допомогою функції PHP echo ()

Головна> Програми> Apache

301 редирект - коректна переадресація через htaccess і php header

редирект 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):

    Redirect 301 / http://www.you.com/new.htm
    де:
    Redirect 301- це інструкція, що говорить що сторінка переміщена
    / - означає, що все з верхнього рівня сайту, включаючи всі підкаталоги, буде переадресовано
    http://www.you.com/new.htm- нова сторінка або сайт (не забудьте поставити останній "/", якщо переадресація йде на сайт).

    Щоб переадресувати тільки сторінку, зберігши PR старої сторінки:
    Redirect 301 /old/old.htm http://www.you.com/new.htm
    де:
    /old/old.htm- шлях і ім'я старої сторінки

    Аналогічний синтаксис для переадресації сайту:
    Redirect Permanent / http://www.you.com/

    Приклад переадресації каталогу:
    Redirect Permanent / 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 %>
  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:

    • location = "http://www.newdomain.com";
    • 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 сторінки на новий сайт.

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 » ( постійно переміщений):

Також перезапис можлива в два етапи. Перший рядок виробляє перезапис коду стану, а друга перенаправляє на нову адресу.

Нещодавно показував як можна зробити переадресацію на htaccess тепер пропоную варіант php переадресації () - як альтернативу 301 редіректу сервера. Навіщо це потрібно? - а за тим що не скрізь і не завжди виходить на htaccess зробити правильну переадресацію.

І так, для початку потрібно написати умова при якому буде спрацьовувати переадресація. У wordpress пишемо код в файл header.php або в будь-який інший файл вашої теми вище функції get_header () в самий початок, до тегів хтмл. Код буде такого плану:

if (is_category (2)) (// умова спрацьовування переадресації
header ( "HTTP / 1.1 301 Moved Permanently"); // відповідь сервера
header ( "Location: http://www.vashsite.ru/cat3/"); // адреса сторінки на яку направляємо
exit ();
}
?>

Якщо вам потрібна php переадресація на wordpress в локальному місці, наприклад хочем перенаправити з однієї категорії на головну сторінку, Можна записати вище наведений код в будь-який файл теми який спрацьовує на висновок категорії (наприклад category.php) вище коду виклику шапки get_header ();

Як працює php переадресація в рядку відповіді

При пхп переадресації ми отримуємо точно таку відповідь сервера, як ніби ми зробили це через конфіг сервера, з поправкою на те швидкість обробки буде трохи нижче. Скріншот відповіді сервера в хром:

Все той же редирект 301 тільки реалізований на ПХП.

Навіщо використовувати 301 редирект php

Буває ситуація, коли потрібно зафіксо всю категорію, таксономії, мітку ВП або заблокувати Custum Post Type без видалення їх. Наприклад, ми перенесли контент, але Посиланням вже проіндексовані в цьому випадку нам допоможе 301 редирект php, який ми зможемо вставити в будь-яке місце. Звичайно, такий редирект поступається по продуктивності редіректу з налаштувань сервера, але писати большушій маску під таксономию або CPT дуже великий геморой.

Якщо не спрацьовує 301 редирект php?

Редирект на ПХП може не спрацьовувати через не спрацювання умови, так що для початку потрібно:

  1. Перевірити умова на пхп, наприклад закинути туди echo "Test";
  2. Якщо умова спрацьовує, то потрібно дивитися де знаходиться наш код переадресації, якщо нижче тегів хтмл то це і є наша проблема. Треба підняти вище за все

Завдяки можливості перенаправляти сайт з PHP ми можемо реалізувати механізм редиректів там де htaccess не справляється, точніше ми не можемо впоратися 🙂

Якщо у вас залишилися питання пишіть їх в коментарях або мені на.

Last modified on February 25th 2017 by Vincy.

PHP redirect mechanism is used to navigate the user from one page to another without clicking any hyperlinks. This will be helpful in such circumstances where the redirect should be done in the background. For example, when the user is accessing payment gateway, the redirect should automatically be taken place to notify URL using PHP script.

PHP provides predefined function, named header (), for URL redirection. Using this header () function, we need to send location header by specifying URL to which the page should be redirected.

Unlike where there are several ways to handle URL redirect works based on the browser, PHP avoids such confusion and have header () function create the same effect in all browsers. For that only, we have concluded with JavaScript redirect article that server side redirect is preferable.

PHP Redirect Syntax

header ( "Location: target-url");

In the above syntax of PHP redirect, we need to replace with a valid URL to which we want to move. We can specify either absolute URL or relative URL for this location header. If we specify relative URL, it will search for the page in our domain where we exist.

Note: Before specifying page URL for location header, we should make sure that the page exists.

Caution before Redirect

Before executing PHP redirect, we should ensure about, no output is sent to the browser before the line where we call the header () function. For example,

Echo "PHP Redirect"; header ( "Location: сайт");

This script will display the following warning notice to the browser.

Warning: Can not modify header information - headers already sent by (...

It is not only applicable for header function, rather for all the PHP functions like set_cookie (), session_start () and etc., whatever can modify the header. For that, we should remove all content which will stop sending location header to the browser.

Possible Ways of Sending Output

  • HTML content like text or tags.
  • Unnecessary white spaces before PHP delimiters.
  • PHP error or warning notices that occur before calling redirect.
  • PHP, like, echo (), print ().

Safety Measures from output being Sent before PHP Redirect

  • Since HTML content should be sent before the redirect, we can separate PHP logic from HTML content.
  • For being in the safety side we can put exit command after redirect statement of PHP file. For example, header ( "Location: сайт"); exit;
  • We can enable PHP output buffering to stop sending output to the browser and stored into a buffer instead.

(PHP 4, PHP 5, PHP 7)

header - Send a raw HTTP header

Description

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

header () is used to send a raw HTTP header. See the »HTTP / 1.1 specification for more information on HTTP headers.

Remember that header () must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include, or require, Functions, or another file access function, and have spaces or empty lines that are output before header () is called. The same problem exists when using a single PHP / HTML file.


/ * This will give an error. Note the output
* Above, which is before the header () call * /
header ();
exit;
?>

Parameters

The header string.

There are two special-case header calls. The first is a header that starts with the string " HTTP /"(Case is not significant), which will be used to figure out the HTTP status code to send. For example, if you have configured Apache to use a PHP script to handle requests for missing files (using the ErrorDocument directive), you may want to make sure that your script generates the proper status code.

header ( "HTTP / 1.0 404 Not Found");
?>

The second special case is the "Location:" header. Not only does it send this header back to the browser, but it also returns a REDIRECT(302) status code to the browser unless the 201 or a 3xx status code has already been set.

header ( "Location: http://www.example.com/"); / * Redirect browser * /

/ * Make sure that code below does not get executed when we redirect. * /
exit;
?>

Replace

The optional replace parameter indicates whether the header should replace a previous similar header, or add a second header of the same type. By default it will replace, but if you pass in FALSE as the second argument you can force multiple headers of the same type. For example:

header ( "WWW-Authenticate: Negotiate");
header ( "WWW-Authenticate: NTLM", false);
?>

Http_response_code

Forces the HTTP response code to the specified value. Note that this parameter only has an effect if the header is not empty.

Return Values

No value is returned.

Changelog

Version Description
5.1.2 This function now prevents more than one header to be sent at once as a protection against header injection attacks.

Examples

Example # 1 Download dialog

If you want the user to be prompted to save the data you are sending, such as a generated PDF file, you can use the »Content-Disposition header to supply a recommended filename and force the browser to display the save dialog.

// We "ll be outputting a PDF
header ( "Content-Type: application / pdf");

// It will be called downloaded.pdf
header ( "Content-Disposition: attachment; filename =" downloaded.pdf "");

// The PDF source is in original.pdf
readfile ( "original.pdf");
?>

Example # 2 Caching directives

PHP scripts often generate dynamic content that must not be cached by the client browser or any proxy caches between the server and the client browser. Many proxies and clients can be forced to disable caching with:

header ( "Cache-Control: no-cache, must-revalidate"); // HTTP / 1.1
header ( "Expires: Sat, 26 Jul 1 997 5:00:00 GMT"); // Date in the past
?>

You may find that your pages aren "t cached even if you don" t output all of the headers above. There are a number of options that users may be able to set for their browser that change its default caching behavior. By sending the headers above, you should override any settings that may otherwise cause the output of your script to be cached.

Workaround: do not send those headers.

Also, be aware that IE versions 5, 6, 7, and 8 double-compress already-compressed files and do not reverse the process correctly, so ZIP files and similar are corrupted on download.

Workaround: disable compression (beyond text / html) for these particular versions of IE, e.g., using Apache "s" BrowserMatch "directive. The following example disables compression in all versions of IE:

BrowserMatch ". * MSIE. *" Gzip-only-text / html

«An obsolete version of the HTTP 1.1 specifications (IETF RFC 2616) required a complete absolute URI for redirection. The IETF HTTP working group found that the most popular web browsers tolerate the passing of a relative URL and, consequently, the updated HTTP 1.1 specifications (IETF RFC 7231) relaxed the original constraint, allowing the use of relative URLs in Location headers. »

4. Relative URIs are NOT allowed

wrong: Location: /something.php?a=1
wrong: Location:? a = 1

It will make proxy server and http clients happier.

9 years ago

If you want to remove a header and keep it from being sent as part of the header response, just provide nothing as the header value after the header name. For example ...

PHP, by default, always returns the following header:

"Content-Type: text / html"

Which your entire header response will look like

HTTP / 1.1 200 OK
Server: Apache / 2.2.11 (Unix)
X-Powered-By: PHP / 5.2.8

Content-Type: text / html; charset = UTF-8
Connection: close

If you call the header name with no value like so ...

Header ( "Content-Type:");

?>

Your headers now look like this:

HTTP / 1.1 200 OK
Server: Apache / 2.2.11 (Unix)
X-Powered-By: PHP / 5.2.8
Date: Fri, 16 Oct 2009 23:05:07 GMT
Connection: close

16 years ago

If you haven "t used, HTTP Response 204 can be very convenient. 204 tells the server to immediately termiante this request. This is helpful if you want a javascript (or similar) client-side function to execute a server-side function without refreshing or changing the current webpage. Great for updating database, setting global variables, etc.

Header ( "status: 204"); (Or the other call)
header ( "HTTP / 1.0 204 No Response");

10 years ago

Here is a php script I wrote to stream a file and crypt it with a xor operation on the bytes and with a key:

The encryption works very good but the speed is decrease by 2, it is now 520KiB / s. The user is now asked for a md5 password (instead of keeping it in the code directly). There is some part in French because it "s my native language so modify it as you want.

// Stream files and encrypt the data on-the-fly

// Settings
// - File to stream
$ File = "FILE_out";
// - Reading buffer
$ Bufferlength = 3840;
// - Key in hex
// $ keychar = "9cdfb439c7876e703e307864c9167a15";

// Function: Convertion hex key in a string into binary
function hex2bin ($ h) (
if (! is_string ($ h)) return null;
$ R = array ();
for ($ a = 0; ($ a * 2)< strlen ($h ); $a ++) {
$ Ta = hexdec ($ h [2 * $ a]);
$ Tb = hexdec ($ h [(2 * $ a + 1)]);
$ R [$ a] = (int) (($ ta<< 4 ) + $tb );
}
return $ r;
}

// Function to send the auth headers
function askPassword ($ text = "Enter the password") (
header ( "WWW-Authenticate: Basic realm =" ". utf8_decode ($ text). "" ");
header ( "HTTP / 1.0 401 Unauthorized");
return 1;
}

// Key is asked at the first start
if (! isset ($ _ SERVER [ "PHP_AUTH_PW"])) (
askPassword ();
echo "Une clé est nécessaire!
"
;
exit;
}
// Get the key in hex
$ Keychar = $ _SERVER [ "PHP_AUTH_PW"];

// Convert key and set the size of the key
$ Key = hex2bin ($ keychar);
$ Keylength = count ($ key);
// Teste si la clé est valide en hex
if ($ key == "" || $ keylength<= 4 ) {
askPassword ( "Clé incorrecte!");
// echo "Clé incorrecte!
";
exit ();
}
// Teste si la clé est de longueur d "une puissance de 2
if (($ keylength% 2)! = 0) (
askPassword ( "Clé de longueur incorrecte (multiple de 2 uniquement)");
// echo "Clé de longueur incorrecte (puissance de 2 uniquement)
";
exit ();
}

// Headers
header ( "Content-Type: application / octet-stream;");
header ( "Content-Transfer-Encoding: binary");
header ( "Content-Length:". filesize ($ file). ";");
header ( "filename = \" ". $ file." \ ";");
flush (); // this doesn "t really matter.

// Opening the file in read-only
$ Fp = fopen ($ file, "r");
while (! feof ($ fp))
{
// Read a buffer size of the file
$ Buffer = fread ($ fp, $ bufferlength);
$ J = 0;
for ($ i = 0; $ i< $bufferlength ; $i ++) {
// The key is read in loop to crypt the whole file
if ($ i% $ keylength == 0) (
$ J = 0;
}
// Apply a xor operation between the key and the file to crypt
// This operation eats a lots of CPU time (Stream at 1MiB / s on my server; Intel E2180)
$ Tmp = pack ( "C", $ key [$ j]);
$ BufferE = ($ buffer [$ i] ^ $ tmp); //<==== Le fameux XOR

/*
echo "
key [ ". $ j."]: ";
var_dump ($ tmp);
echo "
buffer [ ". $ i."]: ";
var_dump ($ buffer [$ i]);
echo "
bufferE: ";
var_dump ($ bufferE);
echo "
";
//*/

// Send the encrypted data
echo $ bufferE;
// Clean the memory
$ BufferE = "";
$ J ++;
}
$ Buffer = "";
flush (); // this is essential for large downloads
/*
fclose ($ fp);
exit ();
//*/
}
// Close the file and it "s finished
fclose ($ fp);

2021 wisemotors.ru. Як це працює. Залізо. Майнінг. Криптовалюта.