![Временные редиректы (302, 307) на статическом сайте, часто обновляются](https://rvso.com/image/770088/%D0%92%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5%20%D1%80%D0%B5%D0%B4%D0%B8%D1%80%D0%B5%D0%BA%D1%82%D1%8B%20(302%2C%20307)%20%D0%BD%D0%B0%20%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%BC%20%D1%81%D0%B0%D0%B9%D1%82%D0%B5%2C%20%D1%87%D0%B0%D1%81%D1%82%D0%BE%20%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D1%8F%D1%8E%D1%82%D1%81%D1%8F.png)
Дополнительный фон (чтобы избежать проблемы XY):Я работаю над статическим сайтом, который будет содержать URL-адреса типа
www.example.com/książka/
. Проблема с этими URL-адресами в том, что когда вы делитесь ими / вставляете в программу обмена мгновенными сообщениями и т. д., диакритические символы расширяются%<hex>
и становятся нечитаемыми:www.example.com/ksi%C4%85%C5%BCka/
. Поэтому я рассматриваю следующее:
- установка канонического URL страницы как
www.example.com/ksiazka/
("ąż" заменено на "az")- возвращая временное перенаправление (HTTP 302 или 307) на
www.example.com/książka/
.Что не будет работать:
Автоматическая переписывание адресов. Причина: Мы не переходим от "ąż" к "az", а от "az" к "ąż" или, может быть, "ąz", или "aż", или "áz", или к одной из многих других возможностей. Перенаправления должны быть сгенерированы во время генерации страницы, когда мы знаем полный список существующих страниц, и поэтому мы знаем, что "ksiazka" должна перенаправлять на "książka", а не на "książką".
Мне нужно настроить 1 HTTP-перенаправление на страницу. Мне понадобится одно новое HTTP-перенаправление каждый раз, когда я загружаю новую статью.
Редактирование конфигурации NGINX требует доступа root, а я развертываю сайт под разрешениями обычного пользователя. Под Apache вы можете добавить некоторые директивы в .htaccess
, но это проблематично для производительности и не подходит для NGINX.
За исключением этого, я мог бы создать include /etc/nginx/sites-available/mysite
для извлечения содержимого /home/myuser/mysite/_redirects
. Таким образом, сервер считывал бы файл, контролируемый обычным пользователем. Недостаток в том, что это дало бы обычному пользователю доступ ко всем параметрам конфигурации NGINX, в то время как мне нужно только настроить перенаправления.
Чтобы обойти это, я мог бы написать часть автоматизации, которая считывает файл, загруженный пользователем, содержащий только информацию, необходимую для перенаправлений. Что-то вроде файла _redirects
в Netlify. Но это кажется... неправильным. Слишком нестандартным.
Подведем итоги:
- Статический сайт
- Требуется HTTP 302 или HTTP 307
- Частые обновления (ручное редактирование
/etc/nginx
нецелесообразно) - Файлы загружены как непривилегированный системный пользователь
- Не давать этому пользователю слишком много власти над веб-сервером
Как лучше всего это сделать на NGINX?