pasta sub dinâmica Nginx como fastcgi_param

1

Eu tenho um site PHP sendo atendido pelo Nginx. Eu quero ser capaz de acessá-lo através de diferentes subpastas. Basicamente, um usuário pode se inscrever e, quando o fizer, escolher definir um "url". Com base nisso, eles acessarão o site assim:

example.com/{url}

Eu também estaria bem com algo como:

example.com/s/{url}

se isso ajudar a detectar isso.

Eu quero que o Nginx pegue esse URL e passe para o PHP usando fastcgi_param. Além disso, quero que o PHP se comporte como se o site fosse acessado apenas por example.com . Por exemplo, example.com/s/{url}/about seria o mesmo que example.com/about .

    
por user407047 23.03.2017 / 14:58

1 resposta

1

Se eu entendi sua pergunta corretamente, você deseja remover a primeira parte do componente do caminho da URL do site da URL passada para o PHP. É assim que você pode fazer isso:

location ~ ^(?<userurl>[^/]+)(<dest>/.+)$ {
    rewrite ^ $dest break;
}

Então, isso vai mudar URLs como este:

http://example.com/about/something torna-se http://example.com/something .

http://example.com/about torna-se http://example.com/

O regex também captura a parte após o primeiro / para a variável $userurl , que você pode usar no seu fastcgi_param para passar a parte do URL para o script PHP.

No entanto, em vez de dividir o trabalho entre o nginx e seu script PHP, recomendo implementar o padrão front-controller em seu script PHP. Isso significa que ele irá analisar o $_SERVER['REQUEST_URI'] e processar o pedido de acordo com as regras que você implementa no PHP.

Então, no nginx você acabou de adicionar:

try_files $uri $uri/ /index.php;

na seção do host virtual para processar as solicitações.

    
por 23.03.2017 / 15:56

Tags