@miadiva

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

Помогите, пожалуйста, разобраться с синтаксисом для 301 редиректа

Нужно чтобы url с get параметрами:
https://loc.mysite.com/Orders/Order?id=000001&userid=22222222222


перенаправлял на страницу с url
https://loc.mysite.com/Orders/Order_id_000001_userid_22222222222


Возможно ли такое сделать?
  • Вопрос задан
  • 1701 просмотр
Пригласить эксперта
Ответы на вопрос 2
artzolin
@artzolin Куратор тега WordPress
php, WordPress разработка сайтов artzolin.ru
Вы можете получить параметры GET-запроса так:

if ( isset( $_GET['id'] ) ) {
	$id = $_GET['id'];
}


Безопаснее использовать для этого функцию get_query_var()

if ( get_query_var( 'id' ) ) {
	$id = get_query_var( 'id' );
}


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

add_filter( 'query_vars', 'add_my_var' );
function add_my_var( $public_query_vars ) {
	$public_query_vars[] = 'id';
	return $public_query_vars;
}


Все редиректы должны выполняться на хуке 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
@shambler81 Куратор тега htaccess
GET параметр не является частью урла и не попадает в RewriteRule так что работать с ним можно только через %{QUERY_STRING}
RewriteCond - это если, они складываются до RewriteRule
RewriteCond %{QUERY_STRING} (?:^|&)id\=000001(?:$|&)
RewriteCond %{QUERY_STRING} (?:^|&)userid\=22222222222(?:$|&)
RewriteRule ^Orders/Order$ /Orders/Order_id_000001_userid_22222222222? [L,R=301]


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

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


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

Войдите, чтобы написать ответ

Похожие вопросы