добавить_правило_перезаписи_с_конечной_наклонной_чертой_редиректы

Вопрос или проблема

Я создал свои собственные маршруты, используя метод add_rewrite_rule. Я хотел бы узнать, возможно ли с помощью данного метода заставить все созданные мной маршруты перенаправляться на URL, заканчивающийся косой чертой. Например, если я сделаю

add_rewrite_rule('^my-route/', 'index.php?_my_route=1', 'top')

или

add_rewrite_rule('^my-route', 'index.php?_my_route=1', 'top')

и сделаю запрос к http://site.dev/my-route, то он не перенаправляет на http://site.dev/my-route/. Если это возможно, буду признателен за подсказку :).

Просто измените ваше правило на следующее

add_rewrite_rule('^my-route?$', 'index.php?_my_route=1', 'top')

Думаю, это поможет вам
Добавьте это в functions.php

add_action( 'init',function(){
  global $wp;
  $current_url = home_url(add_query_arg(array(),$wp->request));
  $last_char = substr($current_url, -1); 

 if($last_char == "https://wordpress.stackexchange.com/" && filter_var($current_url, FILTER_VALIDATE_URL)){
   wp_redirect( trailingslashit( $current_url ) );
 }
});

Ответ или решение

Конечно! Чтобы ваши пользовательские маршруты, созданные с помощью метода add_rewrite_rule, перенаправлялись на URL с завершающим слэшем, вы можете использовать следующий подход. Это будет включать в себя создание правила перенаправления и добавление соответствующей функции в файл functions.php вашей темы.

Шаг 1: Настройка правила перезаписи

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

add_action('init', function() {
    add_rewrite_rule('^my-route/?$', 'index.php?_my_route=1', 'top');
});

Шаг 2: Перенаправление с отсутствующим слэшем

Теперь добавим функцию, которая будет проверять, есть ли завершающий слэш в вашем URL, и если его нет, перенаправлять пользователя к правильному адресу с завершающим слэшем:

add_action('template_redirect', function() {
    global $wp;
    $current_url = home_url(add_query_arg(array(), $wp->request)); // Получаем текущий URL
    $last_char = substr($current_url, -1); // Извлекаем последний символ

    // Проверяем, что URL не заканчивается на слэш и не является адресом с завершающим слэшем
    if ($last_char !== '/' && strpos($current_url, 'my-route') !== false) {
        wp_redirect(trailingslashit($current_url), 301); // Перенаправляем с добавлением завершающего слэша
        exit; // Прерываем выполнение скрипта после перенаправления
    }
});

Полное решение

Вставьте следующий код в файл functions.php вашей темы:

function custom_rewrite_rule() {
    add_rewrite_rule('^my-route/?$', 'index.php?_my_route=1', 'top');
}
add_action('init', 'custom_rewrite_rule');

add_action('template_redirect', function() {
    global $wp;
    $current_url = home_url(add_query_arg(array(), $wp->request));
    $last_char = substr($current_url, -1);

    // Перенаправляем, если нет завершающего слэша
    if ($last_char !== '/' && strpos($current_url, 'my-route') !== false) {
        wp_redirect(trailingslashit($current_url), 301);
        exit;
    }
});

Заключение

Этот код обеспечивает корректное перенаправление на маршруты с завершающим слэшем, что может помочь избежать проблем с SEO и обеспечить консистентность URL вашего сайта. Не забудьте обновить правила перезаписи, перейдя в "Настройки" -> "Постоянные ссылки" в административной панели WordPress, даже если вы не вносили никаких изменений.

Оцените материал
Добавить комментарий

Капча загружается...