Рейтинг:1

Внутреннее перенаправление wordpress с использованием nginx

флаг mx

У меня есть сайт WordPress с постоянными ссылками, установленными на имя сообщения.

Используя перезапись Nginx, я пытаюсь выполнить внутреннюю переадресацию (без изменения URL-адреса браузера), но пока у меня ничего не получается.

Это работает, но URL меняется

расположение ~ ^/u/(.*) {
    переписать ^/u/(.*) /p/?username=$1 redirect; 
}

Я не понимаю, почему это не работает:

расположение ~ ^/u/(.*) {
    # это возвращает 404
    переписать ^/u/(.*) /p/?username=$1 последним;
}

Весь конфиг

сервер {
    слушать 80;
    слушать [::]:80;
    имя_сервера пример.com;

    корень /srv/www/html;
    журнал_ошибок /var/log/nginx/error.log;
    индекс index.php;

    местоположение = /favicon.ico {
        log_not_found выключен;
        доступ_лог выключен;
    }

    местоположение = /robots.txt {
        позволять все;
        log_not_found выключен;
        доступ_лог выключен;
    }

    расположение ~ ^/u/(.*) {
        переписать ^/u/(.*) /p/?username=$1 последним;
        # try_files $uri /p/?username=$1;
    }

    место расположения / {
        try_files $uri $uri/ /index.php?$args;
    }

    расположение ~ \.php$ {
        client_max_body_size 8M;
        включить fastcgi-php.conf;

        # Смягчить https://httpoxy.org/ уязвимости
        fastcgi_param HTTP_PROXY "";
        fastcgi_intercept_errors включен;
        fastcgi_pass 0.0.0.0:9000;
    }

    расположение ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        истекает макс.;
        log_not_found выключен;
    }
}

Я пишу плагин для WordPress и хочу, чтобы пользователи вводили такие URL-адреса, как https://example.com/u/john71 и внутренне перенаправить на https://example.com/p/?username=john71

Обе ты и п являются страницами WordPress, и п содержит шорткод, который позволяет мне получить имя пользователя.

я мог бы иметь https://example.com/p/?username=john71, но что-то вроде: https://example.com/u/john71 выглядит лучше.

Любая помощь по правилу перезаписи или подходу приветствуется.

флаг us
Вы должны полностью выполнить часть пользовательской маршрутизации запросов в WordPress. Если вы разделяете логику между nginx и WordPress, вы вынуждаете своих пользователей добавлять дополнительную конфигурацию. Например, посмотрите https://wordpress.stackexchange.com/questions/26388/how-to-create-custom-url-routes.
Рейтинг:0
флаг jp

URI в конечном итоге переписывается на /index.php - поэтому WordPress никогда не увидит дополнительную внутреннюю перезапись.

WordPress анализирует исходный запрос, который передается ему в параметре REQUEST_URI (который будет определен в вашем fastcgi-php.conf файл, который, вероятно, включает его из другого файла с именем fastcgi_params).

Вы можете выполнить эту работу, установив REQUEST_URI и SCRIPT_FILENAME непосредственно перед вызовом fastcgi_pass - Например:

расположение ~ ^/u/(.*) {
    включить fastcgi_params;

    fastcgi_param SCRIPT_FILENAME $document_root/index.php;
    fastcgi_param REQUEST_URI /p/?username=$1;

    fastcgi_param HTTP_PROXY "";
    fastcgi_intercept_errors включен;
    fastcgi_pass 0.0.0.0:9000;
}

я не включил fastcgi-php.conf так как он может содержать try_files утверждение, которое не будет работать в этом место расположения.

флаг mx
Спасибо, Ричард. Это хорошая идея, но я не смог заставить ее работать; Я продолжаю получать сообщение «Не найдено» (404). Я нашел этот плагин: https://wordpress.org/plugins/redirection/ делает именно то, что я хотел сделать.
Ivan Shatsky avatar
флаг gr
`SCRIPT_FILENAME` должен содержать полное имя файла с путем, `$document_root/index.php` вместо `/index.php` в этом случае.
Richard Smith avatar
флаг jp
Ой! Зафиксированный. Спасибо @IvanShatsky
флаг mx
Я пробовал с `$document_root/index.php`, но тоже получал 404. Это сработало, когда я заменил `/p/?username=$1` на `p=2154` (2154 — это идентификатор страницы). Я недостаточно знаю о внутренней маршрутизации WordPress. Плагин `redirection` работает хорошо, так что я пока довольствуюсь им.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.