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
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 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 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
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
user3338098user3338098
9261 gold badge17 silver badges36 bronze badges
Does this work for you?
header('Location:/');
answered Sep 28, 2011 at 19:13
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 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
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.
answered Sep 22, 2008 at 22:57
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 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 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
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.
answered Sep 22, 2008 at 22:57
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 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 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.
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 theLocation
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.
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?
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!
На страницах сайтов постоянно что-то добавляется, удаляется и обновляется, чтобы в поисковиках была только актуальная информация и нужные страницы не выпадали из поиска применяются редиректы. Также редиректы используются после отправки форм чтобы не было возможности отправить форму несколько раз.
Основные коды редиректов
- 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. Когда пользователь откроет страницу с редиректом, в системе произойдёт следующее:
- Браузер запросит файл стартовой страницы index.php с сервера.
- Сервер, получив запрос от браузера, сообщит, что файл index.php больше недоступен и браузеру нужно искать новый файл index1.php.
- Браузер отправит новый запрос к серверу, на котором находится index1.php, и получит ответ.
- Браузер отобразит страницу index1.php.
Как настроить PHP-редирект
Прописывать редирект на сайт в PHP нужно в индексном файле. Чаще всего он называется index.php. Для настройки вам понадобится функция 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://.
После этого сохраните изменения:
Periodical readings PHP redirect
Готово, вы настроили редирект.
Как настроить редирект с задержкой
Иногда нужно, чтобы пользователь попал на страницу и только спустя несколько секунд перешел на конечный сайт. Такое перенаправление можно настроить в индексном файле с помощью функции sleep( ).
Чтобы настроить переадресацию с задержкой:
-
1.
Откройте индексный файл страницы, с которой нужно сделать редирект.
-
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. Когда пользователь откроет страницу с редиректом, в системе произойдёт следующее:
- Браузер запросит файл стартовой страницы host.php с сервера;
- Сервер, получив запрос от браузера, сообщит, что файл host.php больше недоступен и браузер будет искать новый файл host1.php;
- Браузер отправит новый запрос к серверу, на котором находится host1.php, и получит ответ;
- Браузер отобразит страницу host1.php.
Как настроить PHP-редирект
Прописывать редирект на сайт в PHP нужно в индексном файле. Чаще всего он называется index.php. Для настройки вам понадобится функция header( ). Она выглядит так:
header($header)
Где $header — строка HTTP-заголовка, который вы будете использовать. Для редиректа нужно использовать заголовок Location — он указывает на адрес целевого сайта.
Чтобы настроить редирект PHP:
- Откройте индексный файл страницы, с которой нужно сделать редирект;
- Впишите туда следующее:
<?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. Мне он показался очень удобным — прямо в админке можно указать свои произвольные урлы.
Например при создании рубрик:
Миша
Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.
Пишите, если нужна помощь с сайтом или разработка с нуля.