nginx PHP переписывает профиль пользователя

0

Я пытаюсь переписать URL-адрес моего URL-адреса, чтобы быть чистым и не содержать параметров, по крайней мере для пользователя. Я использую сервер nginx и имею некоторые проблемы с тем, чтобы это работало.

Пример сайта: http://website.com/subfolder/

Ссылка на профиль: http://website.com/subfolder/profile.php

Что работает: http://website.com/subfolder/profile.php?username=Bobby

Что я хочу работать: http://website.com/subfolder/Bobby

Блок кода в моей конфигурации сайта:

location /subfolder/ {
    if ($query_string ~ "^username=([A-Za-z0-9]+)$"){
        rewrite ^/profile.php$ http://website.com/subfolder/%1 redirect;
    }
}
  • 0
    только одна подсказка, вы делаете наоборот, вы пытаетесь внутренне переписать запрос со строкой запроса к чему-то, что PHP не поймет. Вам нужно написать окончательный URL-адрес в своем PHP-коде и управлять переписыванием с этого нового URL-адреса в версию строки запроса внутри Nginx.
Теги:
nginx
url-rewriting

1 ответ

0

Ваша переадресация почти правильна. Просто небольшие косметические изменения.

location = /subfolder/profile.php {
    if ($arg_username) {
        return 301 /subfolder/$arg_username/;
    }
    fastcgi_pass 127.0.0.1:9001;
    include fastcgi_params;
}

Теперь, как сказал regilero, вам нужно разобрать/вставить папку/имя пользователя/внутри скрипта или вы можете сделать это с помощью nginx

location ~ ^/subfolder/(?<username>.+)/$ {
   rewrite ^(.*)$ /subfolder/profile.php?username=$username break;
   fastcgi_pass 127.0.0.1:9001;
   include fastcgi_params;
   fastcgi_param REQUEST_URI $uri$is_args$args;
}

2 важных примечания: переписывающий break ключевого слова, защищающее от редиректа цикла; fastcgi_param REQUEST_URI обычно составляет $request_uri (в fastcgi_params), но это оригинальный URI, поэтому нам нужно его изменить.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню