Это вопрос о перезаписи, но, похоже, это не проблема самих перезаписей - я сделал все, что мог, чтобы попытаться исследовать их. Я перемещаю веб-сайт из структуры на основе PHP в Ghost и пытаюсь перенаправить URL-адреса в виде example.com/blog/blog.php?postid=28
к example.com/post-title-here/
. Однако всякий раз, когда я пытаюсь получить доступ к первому URL-адресу для проверки решения для перезаписи, он добавляет только косую черту непосредственно перед ?
и затем дает мне 404. Я заметил, что он делает это без каких-либо location
основанные на правилах. Это то, что мешает работе любого решения для перезаписи? Если да, то как мне этого не сделать?
example.com.conf
:
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:2368;
proxy_set_header Host $host;
}
}
Мне удалось продолжить исследование и ответить на свой вопрос. Мой файл конфигурации (хранится в /etc/nginx/conf.d/
) теперь выглядит так:
map $query_string $updated_path {
"postid=28" "/proper-path-to-post/";
"postid=27" "/another-proper-path/";
...
}
server {
listen 80;
server_name www.domain.*;
location /blog/blog.php {
rewrite ^/blog/blog.php $updated_path? permanent;
}
location / {
proxy_pass http://127.0.0.1:2368;
proxy_set_header Host $host;
}
}
Я не понимал, что nginx принимает какие-либо аргументы в URL (все после ?
) и сохраняет его в переменной $query_string
, поэтому моя предыдущая конфигурация была недействительной. Блок карты делает в основном то, что он говорит - отображает случаи $query_string
каким должен быть правильный путь к посту. Затем в серверном блоке /blog/blog.php
location перезаписывает любые URL-адреса на правильный путь на основе аргументов. В ?
в конце $updated_path
говорит nginx не повторять аргументы, переданные в URL.