Как изменить url страницы php

e.g. i have page with url http://mysite.com?page=3&var=10 also there is form on page. When form submitted there some actions in php but i need to remove this ?page=3&var=10 after form was

e.g. i have page with url http://mysite.com?page=3&var=10 also there is form on page.

When form submitted there some actions in php but i need to remove this ?page=3&var=10 after form was submitted somehow is there way compatible with all browsers trough PHP without mod_rewrite?

asked Sep 28, 2011 at 19:10

JohnA's user avatar

3

This is an old topic, but just in case anyone else is searching for this in the future, you can use the javascript replaceState to change the history and browser bar label. A simple php function to do this:

function set_url( $url )
{
    echo("<script>history.replaceState({},'','$url');</script>");
}

Then would simply call this function with the desired url (presumably dropping the post variables):

set_url("http://example.com");

A page reload or a back after calling another page will now have the new url location in the history.

I think that using POST may be a more elegant solution, but if you must use GET this is a work around.

answered Feb 11, 2018 at 12:14

Big D's user avatar

Big DBig D

811 silver badge5 bronze badges

If you’re using action=index.php, then all values will be posted to index php, ?page=3&var=10 will be automatically removed.

If you want to post to the same page you can either use ‘action=index.php?page=3&var=10’ or action=<?php echo $_SERVER['PHP_SELF'] ?>

You can check at the beginning of the page if something submitted and then redirect to whatever you want with header('Location: http://www.example.com/'); More about header function http://php.net/manual/en/function.header.php

answered Sep 28, 2011 at 19:14

Tural Ali's user avatar

Tural AliTural Ali

21.7k18 gold badges76 silver badges129 bronze badges

1

Yeah, the solution is quite simple (even if not really SEO friendly):

<?php
 header("Location: http://mysite.com")
?>

just for information…why do you need it?

answered Sep 28, 2011 at 19:13

ArtoAle's user avatar

ArtoAleArtoAle

2,9291 gold badge24 silver badges48 bronze badges

4

use parse_str to get the query string as an associative array that is easy to modify. Then use http_build_query to convert the associative array into a query string.

$queryString = $s['QUERY_STRING'];
$params = array();
parse_str($queryString, $params);
//change $params as needed
$queryString = http_build_query($params);
if ($queryString) {
  $queryString = '?'.$queryString;
}
return preg_replace("/\?.*/s","",$s['REQUEST_URI']).$queryString;

preg_replace("/\?.*/s","",$s['REQUEST_URI']) removes the original query string allowing you to replace it.

answered Jan 19, 2016 at 23:04

user3338098's user avatar

user3338098user3338098

9261 gold badge17 silver badges36 bronze badges

Does this work for you?

header('Location:/');

answered Sep 28, 2011 at 19:13

Rene Pot's user avatar

Rene PotRene Pot

24.5k7 gold badges68 silver badges91 bronze badges

mod_rewrite cannot affect what’s displayed in the user’s browser address bar, UNLESS the rewrite does an externally visible redirect. Otherwise it only rewriting things within the webserver, and that’s invisible to the user.

If you want to affect the user’s address bar, you’ll have to do a redirect via header('Location: ...') after the form’s finished processing.

answered Sep 28, 2011 at 19:14

Marc B's user avatar

Marc BMarc B

353k43 gold badges414 silver badges494 bronze badges

In PHP, replace one URL with another within a string e.g.

New post on the site <a href="http://stackoverflow.com/xyz1">http://stackoverflow.com/xyz1</a></p>

becomes:

New post on the site <a href="http://yahoo.com/abc1">http://yahoo.com/abc1</a></p>

Must work for repeating strings as above. Appreciate this is simple but struggling!

Blorgbeard's user avatar

Blorgbeard

99.7k48 gold badges226 silver badges270 bronze badges

asked Sep 22, 2008 at 22:51

4

function replace_url($text, $newurl) {
    $text = preg_replace('@(https?://([-w.]+)+(:d+)?(/([w/_.]*(?S+)?)?)?)@', $newurl, $text);
    return $text;
}

Should work.
Regex stolen from here. This will replace all URLs in the string with the new one.

Community's user avatar

answered Sep 22, 2008 at 22:57

William Keller's user avatar

William KellerWilliam Keller

5,2361 gold badge25 silver badges22 bronze badges

Use str_replace():

$text = str_replace('http://stackoverflow.com/xyz1', 'http://yahoo.com/abc1', $text);

That will replace the first URL with the second URL in $text.

answered Sep 22, 2008 at 22:55

Paige Ruten's user avatar

Paige RutenPaige Ruten

170k36 gold badges175 silver badges197 bronze badges

Try this:

preg_replace('#(https?://)(www.)?stackoverflow.comb#', '12yahoo.com', $text);

If you want to change the path after the url, add another group and use preg_replace_callabck. More information in the PHP documentation.

answered Sep 22, 2008 at 22:55

Armin Ronacher's user avatar

Armin RonacherArmin Ronacher

31.7k13 gold badges65 silver badges69 bronze badges

In PHP, replace one URL with another within a string e.g.

New post on the site <a href="http://stackoverflow.com/xyz1">http://stackoverflow.com/xyz1</a></p>

becomes:

New post on the site <a href="http://yahoo.com/abc1">http://yahoo.com/abc1</a></p>

Must work for repeating strings as above. Appreciate this is simple but struggling!

Blorgbeard's user avatar

Blorgbeard

99.7k48 gold badges226 silver badges270 bronze badges

asked Sep 22, 2008 at 22:51

4

function replace_url($text, $newurl) {
    $text = preg_replace('@(https?://([-w.]+)+(:d+)?(/([w/_.]*(?S+)?)?)?)@', $newurl, $text);
    return $text;
}

Should work.
Regex stolen from here. This will replace all URLs in the string with the new one.

Community's user avatar

answered Sep 22, 2008 at 22:57

William Keller's user avatar

William KellerWilliam Keller

5,2361 gold badge25 silver badges22 bronze badges

Use str_replace():

$text = str_replace('http://stackoverflow.com/xyz1', 'http://yahoo.com/abc1', $text);

That will replace the first URL with the second URL in $text.

answered Sep 22, 2008 at 22:55

Paige Ruten's user avatar

Paige RutenPaige Ruten

170k36 gold badges175 silver badges197 bronze badges

Try this:

preg_replace('#(https?://)(www.)?stackoverflow.comb#', '12yahoo.com', $text);

If you want to change the path after the url, add another group and use preg_replace_callabck. More information in the PHP documentation.

answered Sep 22, 2008 at 22:55

Armin Ronacher's user avatar

Armin RonacherArmin Ronacher

31.7k13 gold badges65 silver badges69 bronze badges

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

Это можно сделать с помощью несколько методов PHP, JavaScript и HTML. В этой статье мы расскажем о каждом из методов, которые можно использовать для PHP перенаправления на другую страницу.

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

<?php
$new_url = 'https://example.com/final.php';
?>
  • Использование функции PHP header() для редиректа URL-адреса
  • Вывод кода JavaScript-редиректа с помощью функции PHP echo()
  • Использование метатегов HTML для редиректа
  • Заключение

Если хотите добавить редирект с 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-адреса тоже будут работать. Также можно использовать эту функцию для перенаправления пользователей на внешние сайты или веб-страницы.

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

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

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

<?php
echo "<script>self.location='https://example.com/final.php';</script>";
echo "<script>document.location.href='https://example.com/final.php';</script>";
echo "<script>window.location.href='https://example.com/final.php';</script>";
echo "<script>window.location.replace('https://example.com/final.php');</script>";
?>

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

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

<meta http-equiv="Location" content="http://example.com/final.php">
<!-- The following line will redirect after the given number of seconds. Zero in our case. -->
<meta http-equiv="refresh" content="0;url=http://example.com/final.php">

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

<meta http-equiv="refresh" content="8">

В этой статье я рассмотрел три различных метода перенаправления с index php, а также их преимущества и недостатки. Конкретный метод, который стоит использовать, зависит от задач проекта.

Redirection allows you to redirect the client browser to a different URL. You can use it when you’re switching domains, changing how your site is structured, or switching to HTTPS.

In this article, I’ll show you how to redirect to another page with PHP. I’ll explain exactly how PHP redirects work and show you what happens behind the scenes.

Learn PHP With a Free Online Course

If you want to learn PHP, check out our free online course on PHP fundamentals!

How Does Basic Redirection Work?

Before we dive into the specifics of PHP redirection, let’s quickly understand how exactly HTTP redirection works. Take a look at the following diagram.

How Redirection WorksHow Redirection WorksHow Redirection Works

Let’s understand what’s going on in the above screenshot:

  • The client browser requests a specific page from the server. In the above example, the client has requested the contents of the index.php file.
  • The server receives the index.php file request and wants to inform the client that it’s no longer available or moved somewhere else, and it should look to a new file instead: new_index.php. The server sends the Location header with a new URL along with the 301 or 302 HTTP code. These are the HTTP codes for redirection.
  • When a client browser encounters the 301 or 302 code, it knows that it has to initiate another request to a new URL to fetch the content. It initiates a request to fetch the new_index.php file in the above example.
  • Finally, a server sends the contents of the new URL.

So that’s how a basic HTTP redirection works. In the next section, we’ll discuss how PHP redirection works.

How Redirection Works in PHP

In PHP, when you want to redirect a user from one page to another page, you need to use the header() function. The header function allows you to send a raw HTTP location header, which performs the actual redirection as we discussed in the previous section.

How to Use Header Function

Let’s go through the syntax of the header() function.

1
header( $header, $replace, $http_response_code )
  • $header: This is the HTTP header string that you want to use. In our case, we’ll use the Location header for redirection.
  • $replace: It’s an optional parameter which indicates whether the header should replace a previous similar header.
  • $http_response_code: It allows you to send a specific response code.

Now, let’s have a look at the following example to understand how it all works together.

1
<?php
2
// index.php

3
header("Location: https://www.yoursite.com/new_index.php");
4
exit();
5
?>

When the above script is executed, it’ll redirect the client browser to http://www.yoursite.com/new_index.php. In the background, it sends a raw HTTP Location header along with the 302 status code. The 302 status code is used for temporary redirection, but if you want permanent redirection, you can pass the 301 code in the third argument, as shown in the following snippet.

1
<?php
2
// index.php

3
header("Location: http://www.yoursite.com/new_index.php", TRUE, 301);
4
exit();
5
?>

The 301 permanent redirect allows you to inform the search bots that the page is no longer available, and it can be replaced with a new page.

Why Should You Use the Die() or Exit() Function After the Header Redirection?

Users with sharp eyes would have noticed that I’ve used the exit() function in the above example. In fact, it’s mandatory that you use either the exit() or the die() function immediately after the header redirection to stop script execution and avoid any undesired results.

So it’s always recommended practice to use one of these functions after redirection.

The Famous Error: Headers Are Already Sent

If you’re an experienced PHP programmer, I’m sure you’ve come across this famous PHP error at some point in your day-to-day PHP development. For beginners, however, encountering this error is really annoying, since it’s really hard to debug and fix. In most cases, they don’t even have a clue that it’s caused by the header redirection.

The rule of thumb is that when you use the header() function in your script, you need to make sure that you don’t send any output before it. Otherwise, PHP will complain with the «headers are already sent» error. This can happen even if you’ve sent a single white space before using the header function.

Conclusion

In this post, we discussed one of the important features of PHP programming: redirection. First, we went through the basics of HTTP redirection, and then I demonstrated how it works in PHP.

The Best PHP Scripts on CodeCanyon

Explore thousands of the best and most useful PHP scripts ever created on CodeCanyon. With a low-cost one-time payment, you can purchase one of these high-quality WordPress themes and improve your website experience for you and your visitors.

Popular PHP scripts on CodeCanyonPopular PHP scripts on CodeCanyonPopular PHP scripts on CodeCanyon

Here are a few of the best-selling and up-and-coming PHP scripts available on CodeCanyon for 2020.

Did you find this post useful?

Sajal Soni

Software Engineer, FSPL, India

I’m a software engineer by profession, and I’ve done my engineering in computer science. It’s been around 14 years I’ve been working in the field of website development and open-source technologies.

Primarily, I work on PHP and MySQL-based projects and frameworks. Among them, I’ve worked on web frameworks like CodeIgnitor, Symfony, and Laravel. Apart from that, I’ve also had the chance to work on different CMS systems like Joomla, Drupal, and WordPress, and e-commerce systems like Magento, OpenCart, WooCommerce, and Drupal Commerce.

I also like to attend community tech conferences, and as a part of that, I attended the 2016 Joomla World Conference held in Bangalore (India) and 2018 DrupalCon which was held in Mumbai (India). Apart from this, I like to travel, explore new places, and listen to music!

Как сделать редирект PHP

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

Основные коды редиректов

  • 301 – текущая страница удалена на всегда, заменой старой считать новый URL.
  • 302 – текущая страница временно не доступна, заменой считать пока новый URL.
  • 303 – используется после отправки формы методом POST (подробнее Post/Redirect/Get — PRG).

Итак, сделать 301-й редирект можно так:

header('Location: https://example.com', true, 301);
exit();

PHP

Но функция header() не сработает если до ее вызова в браузер уже выводился какой-то контент и вызовет ошибку:

Warning: Cannot modify header information - headers already sent by…

Исправить ее можно использовав буферизацию вывода добавив в самое начало скрипта ob_start();

Также можно подстраховаться добавив JS-редирект и ссылку если функция header() не сработает.

header('Location: https://example.com', true, 301);
echo "<script>window.location.replace('https://example.com');</script>";
echo 'Перенаправление… Перейдите по <a href="https://example.com">ссылке</a>.';
exit();

PHP

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

function redirect($url, $code = 301)
{
	header('Location: ' . $url, true, $code);
	echo "<script>window.location.replace('" . $url . "');</script>";
	echo 'Перенаправление… Перейдите по <a href="' . $url . '">ссылке</a>.';
	exit();
}

/* В index.php */
if ($_SERVER['REQUEST_URI'] == '/url-old') {
	redirect('https://example.com/url-new');
}

PHP

Если редиректов много:

$urls = array(
	array('/url-old-1', 'https://example.com/url-new-1'), 
	array('/url-old-2', 'https://example.com/url-new-2'), 
	array('/url-old-3', 'https://example.com/url-new-3'),
);
 
foreach ($urls as $row) {
	if ($_SERVER['REQUEST_URI'] == $row[0]) {
		redirect($row[1]);
	}
}

PHP

Читайте нашу статью, чтобы узнать, как сделать редирект PHP.

Иногда нужно, чтобы пользователь, который перешёл по ссылке, попал на другой URL-адрес.
Предположим, вы делаете редизайн сайта: меняете цветовое оформление, перемещаете разделы на странице, добавляете новый функционал. Но пока работа не закончена, нужно, чтобы сайт продолжал работать. В этом случае можно скопировать его прежний вариант на другой домен или поддомен. Также бывает, что на сайте проходит временная акция. Пока действует предложение, вы хотите перенаправлять клиентов на страницу акции. В таких случаях поможет настройка редиректа.

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

Редирект — это перенаправление пользователя с одной страницы на другую. Причём редирект можно настроить как на разные страницы одного сайта, так и на страницу другого сайта.

Основные виды редиректов:

  • 301 редирект — используется, когда страница окончательно перемещена на другой URL. При таком редиректе поисковики индексируют только новый вариант страницы — той, на которую попадает пользователь.
  • 302 редирект — используется, когда страница перемещена временно. В этом случае поисковые системы индексируют все варианты страницы: и старую, и новую.


PHP location redirect

Для чего нужен редирект

Редирект может понадобиться в следующих ситуациях:

  • замена движка сайта. Когда меняется архитектура сайта, появляется необходимость в настройке редиректа;
  • замена домена. После того как вы перенесли сайт на другой домен, прежний домен некоторое время ещё отображается в поисковике. Если сделать PHP-редирект, поисковик автоматически направит пользователя на новый домен;
  • изменение структуры ресурса. Пока вы меняете структуру сайта, можно создать копию старой версии и сделать на неё редирект;
  • при авторизации. Часто пользователи сайта разделяются на группы, например администратор и посетитель. Пользователи в разных группах имеют разные привилегии, поэтому безопаснее сделать редирект для каждой группы на нужную версию сайта;
  • переход на мобильную версию. Если посетитель сайта использует планшет или мобильный телефон, с таким редиректом он попадёт на версию, которая адаптирована под мобильные устройства;
  • перенос разделов на поддомены. Например, на странице вашего сайта site.ru/shop был каталог товаров. Но ассортимент расширялся, и со временем понадобилось перенести этот раздел на поддомен shop.site.ru. В этом случае редирект настраивается с site.ru/shop на shop.site.ru;
  • несколько доменов в разных доменных зонах. Предположим, вы разместили сайт на домене site.ru. При этом у вас есть ещё несколько доменов: site.com, site.info и site.biz. С доменов в зонах .COM, .INFO и .BIZ можно настроить редирект на site.ru, чтобы у этого сайта росла посещаемость.


Redirect PHP URL HTTP

Переадресацию можно настроить несколькими способами:

  • с помощью панели управления хостингом,
  • через файл .htaccess,
  • с помощью PHP,
  • средствами HTML.


Чем отличается редирект PHP от HTML

PHP — серверный язык программирования. Это значит, что переадресация будет срабатывать не в коде страницы, а в скрипте, который размещен на сервере. По сути, вы добавляете в код индексного файла скрипт перенаправления. HTML — это язык разметки веб-страниц. Перенаправление можно сделать с помощью метатега, и редирект будет работать именно через код страницы.

Главная особенность редиректа на PHP в том, что переадресация прописана не в коде странице, а с помощью скрипта на сервере. Благодаря этому снижается восприимчивость к фильтрам поисковых систем.

Ниже мы подробнее рассмотрим принцип работы и настройку редиректа в PHP.

Как работает редирект в PHP

Предположим, вы сделали редирект со страницы index.php на index1.php. Когда пользователь откроет страницу с редиректом, в системе произойдёт следующее:

  1. Браузер запросит файл стартовой страницы index.php с сервера.
  2. Сервер, получив запрос от браузера, сообщит, что файл index.php больше недоступен и браузеру нужно искать новый файл index1.php.
  3. Браузер отправит новый запрос к серверу, на котором находится index1.php, и получит ответ.
  4. Браузер отобразит страницу index1.php.

Как настроить PHP-редирект

Прописывать редирект на сайт в PHP нужно в индексном файле. Чаще всего он называется index.php. Для настройки вам понадобится функция header( ).
Она выглядит так:

Где $header — строка HTTP-заголовка, который вы будете использовать. Для редиректа нужно использовать заголовок Location — он указывает на адрес целевого сайта.

Чтобы настроить редирект PHP:

  1. 1.

    Откройте индексный файл страницы, с которой нужно сделать редирект.

  2. 2.

    Впишите следующие строки:

    <?php
    // index.php
    header(“Location: http://site.ru/index1.php”);
    exit( );
    ?>

    Где http://site.ru/index1.php — ссылка на индексный файл страницы, на которую ведёт редирект. Если на конечном сайте установлен SSL-сертификат, вместо http:// укажите https://.
    После этого сохраните изменения:

    Periodical readings PHP redirect

Готово, вы настроили редирект.

Как настроить редирект с задержкой

Иногда нужно, чтобы пользователь попал на страницу и только спустя несколько секунд перешел на конечный сайт. Такое перенаправление можно настроить в индексном файле с помощью функции sleep( ).

Чтобы настроить переадресацию с задержкой:

  1. 1.

    Откройте индексный файл страницы, с которой нужно сделать редирект.

  2. 2.

    Добавьте строку:

    Где 5 — время ожидания в секундах.
    Полный код редиректа с задержкой будет выглядеть так:

    Celebrity PHP redirect

Готово, вы настроили редирект c задержкой.

В ситуациях, когда нужно, чтобы пользователь перешел по ссылке и попал на другой URL-адрес, на помощь приходит редирект. В качестве примера можно привести следующее: на сайте проходит временная акция. Пока действует предложение, потенциальный клиент будет перенаправляться на страницу акции. Или же идет работа по изменению внешнего вида сайта, но пока ведутся техничесие работы, нужно чтобы сайт работал. Для этого можно скопировать его прежний вариант на другой домен или поддомен. В таких случаях можно использовать настройку редиректа.

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

Редирект — это перенаправление пользователя с одной страницы на другую. Редирект можно настроить как на разные страницы одного сайта, так и на страницу другого сайта.

Основные виды редиректов

  • 301 редирект — используется, когда страница окончательно перемещена на другой URL. При таком редиректе поисковики добавляют страниц в базу данных. Как новый вариант страницы (той, на которую попадает пользователь);
  • 302 редирект — используется, когда страница перемещена временно. В этом случае поисковые системы добавляют в базу данных все варианты страницы: и старую, и новую.

Для чего нужен редирект

Редирект может понадобиться в следующих ситуациях:

  • несколько доменов в разных доменных зонах. В качестве примера сайт размещен на домене primer.ru. При этом есть ещё несколько доменов: primer.com, primer.info и primer.biz. С доменов в зонах .COM, .INFO и .BIZ можно настроить редирект на primer.ru, чтобы у этого сайта росла посещаемость;
  • при авторизации. На сайтах есть распеределения на группы, например администратор и посетитель. Пользователи в разных группах имеют разные привилегии, поэтому безопаснее сделать редирект для каждой группы на нужную версию сайта;
  • изменение структуры ресурса. Пока вы меняете структуру сайта, можно создать копию старой версии и сделать на неё редирект;
  • замена домена. После того как сайт перенесли на другой домен, старый домен некоторое время будет отображается в поисковике. Если сделать PHP-редирект, браузер автоматически будет направит пользователя на новый домен;
  • перенос разделов на поддомены. Например, на странице вашего сайта primer.ru/ host был каталог товаров. И ассортимент был увеличен, значит нужно перенести этот раздел на поддомен host.primer.ru. В этом случае редирект настраивается с primer.ru/host на host.primer.ru;
  • переход на мобильную версию. Если посетитель сайта использует планшет или мобильный телефон, с таким редиректом он попадёт на версию, которая адаптирована под мобильные устройства;
  • замена движка сайта. При измене архитектуры сайта, появляется необходимость в настройке редиректа.

Переадресацию можно настроить несколькими способами:

  • через файл .htaccess;
  • с помощью скрипта редиректа PHP;
  • средствами HTML.

Чем отличается редирект PHP от HTML

PHP — серверный язык программирования. Это значит, что переадресация будет срабатывать не в коде страницы, а в скрипте, который размещен на сервере. Благодаря этому снижается восприимчивость к фильтрам поисковых систем. А это в свою очередь добавление в код индексного файла скрипт перенаправления. HTML — это язык разметки веб-страниц. Перенаправление можно сделать с помощью метатега (используемые для передачи структурированных метаданных, как правило, размещаются в разделе <head> веб-документа) , и редирект будет работать именно через код страницы.

Как работает редирект в PHP

Предположим, вы сделали редирект со страницы host.php на host1.php. Когда пользователь откроет страницу с редиректом, в системе произойдёт следующее:

  1. Браузер запросит файл стартовой страницы host.php с сервера;
  2. Сервер, получив запрос от браузера, сообщит, что файл host.php больше недоступен и браузер будет искать новый файл host1.php;
  3. Браузер отправит новый запрос к серверу, на котором находится host1.php, и получит ответ;
  4. Браузер отобразит страницу host1.php.

Logical web

Как настроить PHP-редирект

Прописывать редирект на сайт в PHP нужно в индексном файле. Чаще всего он называется index.php. Для настройки вам понадобится функция header( ). Она выглядит так:

header($header)

Где $header — строка HTTP-заголовка, который вы будете использовать. Для редиректа нужно использовать заголовок Location — он указывает на адрес целевого сайта.

Чтобы настроить редирект PHP:

  1. Откройте индексный файл страницы, с которой нужно сделать редирект;
  2. Впишите туда следующее:
<?php // index.php header(“Location: http://site.ru/index1.php”); exit( ); ?>

Где http://site.ru/index1.php — ссылка на индексный файл страницы, на которую ведёт редирект. Если на конечном сайте установлен SSL-сертификат, вместо http:// укажите https://. После этого сохраните изменения:

<?php
// index.phpц
header("Location: http://site.ru/index1.php");
exit( );
?> 

Как настроить редирект с задержкой

Иногда нужно, чтобы пользователь попал на страницу и только спустя несколько секунд перешел на конечный сайт. Такое перенаправление можно настроить в индексном файле с помощью функции sleep().

Чтобы настроить переадресацию с задержкой, откройте индексный файл страницы, с которой нужно сделать редирект. Добавьте строку:

sleep(5);

5 — время ожидания в секундах. Полный код редиректа с задержкой будет выглядеть так:

<?php
// index.php
sleep (5);
header("Location: http://site.ru/index1.php");
exit( );
?>

Удачной работы! Если возникнут вопросы — напишите нам, пожалуйста, тикет из панели управления хостингом, раздел «Помощь и поддержка».

Если вы читаете эту статью, то наверняка хотя бы раз слышали про WP_Rewrite. Этот класс позволяет работать с постоянными ссылками в WordPress, изменять их вид и структуру. WP_Rewrite задает правила перезаписи, которые будут действовать по всему блогу.

Сейчас же я покажу вам очень простой но действенный метод ручной замены URL конкретных страниц сайта на WordPress. Состоит он всего из трёх шагов: редиректа старых страниц на новые, изменения запроса к базе, перезаписи ссылок.

Шаг 1. Редиректы через хук template_redirect

Этот шаг нужен для того, чтобы страница не была доступна по двум URL одновременно, поэтому мы ставим 301й редирект со всех старых URL на новые (желающие могут реализовать это также через .htaccess).

В примерах я по умолчанию использую префикс для рубрик — category и для меток — tag, у вас они могут отличаться.

Весь код, который вы увидите в этой статье — в functions.php.

function true_301_redirect() {
	/* в массиве указываем все старые=>новые ссылки  */
	$rules = array(
		array('old'=>'/category/без_рубрики/','new'=>'/category/Без_рубрики/'), // рубрика
		array('old'=>'/контакты/','new'=>'/Контакты/'), // страница
		array('old'=>'/привет-мир/','new'=>'/хеллоу-мир/'), // запись
		array('old'=>'/tag/метка/','new'=>'/tag/Метка/') // метка
	);
	foreach( $rules as $rule ) :
		// если URL совпадает с одним из указанных в массиве, то редиректим
		if( urldecode($_SERVER['REQUEST_URI']) == $rule['old'] ) :
			wp_redirect( site_url( $rule['new'] ), 301 );
			exit();
		endif;
	endforeach;
}
 
add_action('template_redirect', 'true_301_redirect');

Вы могли заметить, что в большинстве ссылок я просто добавил заглавные буквы — это сделано для наглядности и такая замена тоже считается перезаписью ссылки.

Ссылки на описания функций, использованных в примерах, вы найдёте в конце статьи.

Шаг 2. Изменение параметров запроса через хук request

Окей, редиректы проставили и, если вы уже начали пробовать то, что получилось, то у вас наверняка повылазили ошибки 404. Сейчас нам нужно добиться того, чтобы новые URL WordPress воспринимал как старые.

function true_request( $query ){
 
	$url_zapros = urldecode($_SERVER['REQUEST_URI']);
 
	/* для рубрик */
	if( $url_zapros == '/category/Без_рубрики/' )
		$query['category_name'] = 'без_рубрики';
 
	/* для страниц */
	if( $url_zapros == '/Контакты/' ){
		$query['pagename'] = urlencode('контакты');
		unset($query['name']);
	}
 
	/* для записей */
	if( $url_zapros == '/хеллоу-мир/' )
		$query['name'] = 'привет-мир';
 
	/* для меток */
	if( $url_zapros == '/tag/Метка/' )
		$query['tag'] = 'метка';
 
	return $query;
}
 
add_filter( 'request', 'true_request', 9999, 1 );

Шаг 3. И конечно же сама перезапись ссылок

Хуки для записей и страниц будут отличаться от хуков для рубрик и меток.

Для записей / страниц

function true_posts_links( $url, $post ){
	if( !is_object( $post ) )
		$post = get_post( $post_id );
 
	$replace = $post->post_name;
 
	/* замены для записей и страниц,
		к сожалению тут только по ID замену можно сделать */
 
	if( $post->ID == 1 ) 
		$replace = 'хеллоу-мир';
	if( $post->ID == 12 ) 
		$replace = 'Контакты';
 
	$url = str_replace($post->post_name, $replace, $url );
	return $url;
}
 
add_filter( 'post_link', 'true_posts_links', 'edit_files', 2 );
add_filter( 'page_link', 'true_posts_links', 'edit_files', 2 );
add_filter( 'post_type_link', 'true_posts_links', 'edit_files', 2 );

Обязательно ли делать проверку именно по ID записи? Да, если в URL присутствует кириллица. Если вы не знаете, где найти ID, спрашивайте в комментах, всё расскажу и покажу.

Перезапись ссылок для рубрик / меток

function true_term_links( $url, $term, $taxonomy ){
	$replace = $term->slug;
 
	/* замены для рубрик/меток, опять-таки нужно указать ID и желаемый ярлык */
	if( $term->term_id == 5 ) 
		$replace = 'Без_рубрики';
	if( $term->term_id == 55 ) 
		$replace = 'Метка';
 
	$url = str_replace($term->slug, $replace, $url );
 
	return $url;
}
 
add_filter( 'term_link', 'true_term_links', 10, 3 );

Альтернатива всему этому в виде плагина Custom Permalinks

Если вы не хотите мудохаться через functions.php, то рекомендую плагин Custom Permalinks. Мне он показался очень удобным — прямо в админке можно указать свои произвольные урлы.

Например при создании рубрик:

Произвольный URL рубрики при помощи плагина Custom Permalinks

Миша

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.

Пишите, если нужна помощь с сайтом или разработка с нуля.

Понравилась статья? Поделить с друзьями:
  • Как изменить url страницы facebook
  • Как изменить url своего сайта
  • Как изменить ttl на телефоне андроид
  • Как изменить url магазина opencart
  • Как изменить ttl на телефон