Php redirect get request

Редирект 301: URL с get-параметрами

Когда дело доходит до редиректа ссылок с get-параметрами, то многие веб-мастера обнаруживают, что стандартные правила в htaccess для них не работают:

Redirect 301 /page.php?id=1 /page/

Еще один не рабочий вариант:

RewriteRule ^page.php?id=1 /page/ [R=301,L]

Правильным решением будет использование директивы RewriteCond :

RewriteEngine On
RewriteCond % ^id=1$
RewriteRule ^(.*)$ http://mysite.com/page/? [R=301,L]

RewriteEngine On
RewriteCond % /page.php
RewriteCond % ^id=1$
RewriteRule ^(.*)$ http://mysite.com/page/? [R=301,L]

Если нужно сделать массовый редирект, то воспользуемся регулярным выражением, где (.*) выбирает любое значение:

RewriteCond % ^id=(.*)$
RewriteRule ^(.*)$ http://mysite.com/page/? [R=301,L]

Для того, чтобы сделать переадресацию с обычного url на ссылку с get-параметрами, пишем:

RewriteCond % /page.php$
RewriteRule ^(.*)$ https://mysite.com/newpage?id=1 [R=301,L]

RewriteCond % ^(?!id)
RewriteRule /page.php$ /newpage?id=1 [L,R=301,QSA]

Редирект средствами php

Бывают ситуации, когда удобнее воспользоваться редиректом на php:

В случае, если нужно сделать переадресацию нескольких url на один адрес, воспользуемся таким кодом:

‘/page.php?id=1’,
‘/page.php?id=2’,

‘/page.php?id=100500’
))) header(«Location: /page/»,TRUE,301);
exit();
>
?>
Этим способом можно делать редирект для любых ссылок, кроме кириллических.

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

Если нужно исключить любые get-параметры на главной странице:

Редирект в nginx

Недавно клиенту потребовалось настроить переадресацию c кириллического адреса на обычный с get-параметрами. При этом apache на сервере не использовался. В таком случае нам поможет nginx:

location =/моя-страница rewrite ^ /page.php?id=1 permanent;
>

Для переадресации со страницы с get-параметрами используем следующий код:

if ($id = 1) rewrite (.*)$ $uri? permanent;
>

После чего нужно перечитать конфигурацию, выполнив service nginx reload или перезапустить nginx — service nginx restart .

Источник

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

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

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

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

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

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

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

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

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

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

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

function redirect($url, $code = 301) < header('Location: ' . $url, true, $code); echo ""; echo 'Перенаправление… Перейдите по ссылке.'; exit(); > /* В index.php */ if ($_SERVER['REQUEST_URI'] == '/url-old') < redirect('https://example.com/url-new'); >
$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]); >>

Источник

Как сделать 301 редирект с Url с get параметрами на url без параметров, но содержащего значения из них?

artzolin

Все редиректы должны выполняться на хуке template_redirect с помощью функции wp_redirect() или wp_safe_redirect() . Разбираете ссылку, проверяете необходимые условия редиректа и собираете новую ссылку. Вот шаблон:

add_action( 'template_redirect', 'custom_template_redirect' ); function custom_template_redirect() < if ( $condition ) < wp_redirect( home_url( '/' ) ); exit(); >>

shambler81

GET параметр не является частью урла и не попадает в RewriteRule так что работать с ним можно только через %
RewriteCond — это если, они складываются до RewriteRule

RewriteCond % (?:^|&)id\=000001(?:$|&) RewriteCond % (?:^|&)userid\=22222222222(?:$|&) RewriteRule ^Orders/Order$ /Orders/Order_id_000001_userid_22222222222? [L,R=301]

Cоответственно для всех вариантов

RewriteCond % (?:^|&)id\=(.+)(?:$|&) RewriteCond % (?:^|&)userid\=(.+)(?:$|&) RewriteRule ^Orders/Order$ /Orders/Order_id_%1_userid_%2? [L,R=301]

где %1 это группа из RewriteCond %2 соответственно
(?: — этот знак анилирует этут группу дабы она не мешала

Спасибо большое! Но у меня не получается

https://loc.mysite.com/Orders/Order_id_000001_userid_11111111111 https://loc.mysite.com/Orders/Order_id_000002_userid_22222222222
https://loc.mysite.com/Orders/Order?id=000001&userid=11111111111
https://loc.mysite.com/Orders/Order_id_000001_userid_11111111111
https://loc.mysite.com/Orders/Order?id=000002&userid=22222222222
https://loc.mysite.com/Orders/Order_id_000002_userid_22222222222

Однако, параметры ?id=000001&userid=11111111111 и ?id=000002&userid=22222222222
перенаправляют только на одну страницу

https://loc.mysite.com/Orders/Order_id_000001_userid_11111111111

shambler81

RewriteCond % .*id\=(9+)\&userid\=(4+).* RewriteRule ^Orders/Order/$ /Orders/Order_id_%1_userid_%2? [L,R=301]

🙁 не могу понять почему у меня не работает, все время редиректит только к одной странице (самой первой созданной).

Думала, может как-то настройки постоянных ссылок влияют, перепробовала все варианты не помогло.
Установила плагин для редактирования .htaccess, тоже ничего. Кэш чистила.
Может дело в вордпрессе? Или может то, что это посты, а не страницы влияет?

Вот так выглядит .htaccess

 RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond % !-f RewriteCond % !-d RewriteRule . /index.php [L] RewriteCond % .*id\=(5+)\&userid\=(1+).* RewriteRule ^Orders/Order/$ /Orders/Order_id_%1_userid_%2? [L,R=301]

Я уже в отчаянии.
Вам все равно спасибо огромное!

shambler81

RewriteEngine On RewriteCond % .*id\=(6+)\&userid\=(9+).* RewriteRule ^Orders/Order/$ /Orders/Order_id_%1_userid_%2? [L,R=301] RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond % !-f RewriteCond % !-d RewriteRule . /index.php [L]

Видимо в вордпрессе не работает все таки.
Я думала что код работает, но не так как надо, а оказывается вообще ничего не происходит. Что с кодом, что без — результат один. Пока пришлось установить плагин и вручную добавлять редирект на каждую страницу. Кстати, через плагин тоже код не работает. ((((
Уже не знаю в какую сторону копать.

Источник

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

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

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

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

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

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

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

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

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

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

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

function redirect($url, $code = 301) < header('Location: ' . $url, true, $code); echo ""; echo 'Перенаправление… Перейдите по ссылке.'; exit(); > /* В index.php */ if ($_SERVER['REQUEST_URI'] == '/url-old') < redirect('https://example.com/url-new'); >
$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]); >>

Источник

Читайте также:  Which browsers support frames in html
Оцените статью