Рейтинг:1

NGINX переписать запрос как путь?

флаг gb

Что я пытаюсь сделать:

Конвертировать

/posts/?post={randomnumber-atoF}
или же
/posts?post=120430awasdfwasfw

к

/posts/120430awasdfwasfw

мой серверный блок (пока что)

сервер {
        слушать 80 default_server;
        слушать [::]:80 default_server;
        корень/форум;
        индекс index.php;
        имя_сервера forum.example.net;
        место расположения / {
                try_files $uri $uri/ =404;
        }
        # передать PHP-скрипты на сервер FastCGI
        #
        расположение ~ \.php$ {
                включить фрагменты/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        }
        местоположение ~ /\.ht {
                отрицать все;
        }
}

Сервер получает URL-адрес, переданный от другого прокси-сервера Nginx (другого удаленного сервера). (и на этом сервере есть SSL, порт 443)

Предметы, которые я пробовал:

переписать ^/posts/index.php /posts/$arg_post навсегда;

редактировать:

извините, я не сказал, что запрос чаще всего попадает в индекс, поскольку «пост» — это запрос в базу данных. Я хочу сделать так, чтобы вам не нужен был запрос, а просто перейдите на {номер сообщения}

флаг sv
Добро пожаловать в ServerFault. `if ($arg_post != "") { переписать ^/posts/ /posts/$arg_post? постоянный; }` скорее всего сработает.
Nolan O avatar
флаг gb
я попробовал ваш код выше, и он приходит к 404 (если сообщение = {номер сообщения} не найдено в БД, оно возвращает 404) Есть ли способ переписать URL-адрес, сохранив /posts/?post=333 (действовать как? без?)
djdomi avatar
флаг za
как насчет того, чтобы показать, какой URL-адрес должен быть и сейчас отображается, ваш комментарий не делает его достаточно ясным
Nolan O avatar
флаг gb
Как PHP должен видеть URL-адрес: ``` /posts?post=12345 ``` И конечный пользователь должен видеть ``` /posts/12345 ```
Рейтинг:0
флаг sv

Заголовок сообщения может быть «преобразовать/переписать URL-адрес для запроса». Во всяком случае, согласно редактированию и комментариям, переписать ^/posts/(?<id>[a-zA-Z0-9]+)$ /posts/?post=$id; может работать. Нет необходимости использовать постоянный флаг для переписать. Если вы используете постоянный, пользователь будет перенаправлен.

сервер {
        слушать 80 default_server;
        слушать [::]:80 default_server;
        корень/форум;
        индекс index.php;
        имя_сервера forum.example.net;

        переписать ^/posts/(?<id>[a-zA-Z0-9]+)$ /posts/?post=$id;

        место расположения / {
                try_files $uri $uri/ =404;
        }
        # передать PHP-скрипты на сервер FastCGI
        #
        расположение ~ \.php$ {
                включить фрагменты/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        }
        местоположение ~ /\.ht {
                отрицать все;
        }
}
Nolan O avatar
флаг gb
при запуске я получаю эту ошибку: ``` 07.07.2021 08:51:19 [ошибка] 244184#244184: *4 цикл перезаписи или внутреннего перенаправления при внутреннем перенаправлении на "/posts/index.php", клиент: ***.***.**. ***, сервер: forum.example.net, запрос: "GET /posts/?1318131055449140129 HTTP/1.1"> 1.1", хост: "192.168.0.195" ```
флаг sv
Моя ошибка. Обновил ответ сейчас.
Nolan O avatar
флаг gb
есть ли способ сделать перезапись, только если файл не найден? как если бы ``` /posts/file``` идет к этому файлу, но если ```/posts/file {код ошибки 404}```, то попробуйте переписать?
флаг sv
Это возможно. Пожалуйста, создайте новый вопрос, чтобы его могли увидеть все для возможного ответа.
Nolan O avatar
флаг gb
на самом деле, этот пост решил это для меня: (jusr заменил `location/directory` на `location/posts/` разместить ссылку [здесь] (https://serverfault.com/questions/767440/nginx-rewrite-rule-subfolder-404-error)

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

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