Добавление URL-адреса перезаписи для базы + детей отдельно

У меня есть главная страница, и кроме нее у нее есть дети. Я успешно переписываю детей так:

add_rewrite_rule('my-url/?([^/]*)', 'index.php?my-var=$matches[1]', 'top'); 

Это отлично работает. Но когда я пытаюсь переписать базу:

 add_rewrite_rule('my-url/?', 'index.php?my-var=main', 'top'); 

… это не работает. Я знаю, он переписывается по первому правилу, поэтому я переключил их, но потом все дети перенаправлялись на главную страницу.

Есть ли способ сделать второе правило строгим, чтобы оно было эффективным только в том случае, если после «my-url /» нет НИЧЕГО? Таким образом, я должен перенести его первым, и все должно работать.

Я обыскал сеть и не нашел решения. Возможно, это мои условия, но я ломаю себя на этом. Я ненавижу регулярное выражение! Стреляйте, если это просто!

Solutions Collecting From Web of "Добавление URL-адреса перезаписи для базы + детей отдельно"

Измените правила перезаписи и порядок на следующее:

 add_rewrite_rule('my-url/([^/]*)/?$', 'index.php?my-var=$matches[1]', 'top'); add_rewrite_rule('my-url/?$', 'index.php?my-var=main', 'top'); 

Почему заказ? Если порядок будет другим, первое правило будет всегда применяться, поэтому набор правил никогда не достигнет вашей главной страницы

Почему изменился синтаксис? Чтобы разрешить правильную обработку дополнительной строки запроса. Например, http://foo.bar/my-url/?my-var=foo и http://foo.bar/my-url/foo/?bar=1 должны быть получены.

Кроме того: перенаправление шаблона, если вы хотите применить свои правила перезаписи для запроса строковых запросов, таких как http://foo.bar/my-url/?my-var=foo :

 function custom_template_redirect(){ preg_match('/(\?|&)my-var=/', $_SERVER['REQUEST_URI'], $matches); if ( get_query_var( 'my-var', false ) !== false && !empty($matches) && !is_admin() ) { wp_redirect( home_url( '/my-url/'.(get_query_var( 'my-var' )?get_query_var( 'my-var' ).'/':'') ) ); exit(); } } add_action( 'template_redirect', 'custom_template_redirect' ); 

Это должно работать для обоих, небольшие корректировки для каждого шаблона регулярного выражения –

 add_rewrite_rule('my-url/([^/]+)/?$', 'index.php?my-var=$matches[1]', 'top'); add_rewrite_rule('my-url/?$', 'index.php?my-var=main', 'top');