2012-04-07 2 views
2

인수가 전달되기 전에 파일 이름 끝에 .php을 지정하지 않고 url 인수를 구문 분석 할 수 있도록 nginx를 구성 할 수 있는지 궁금합니다.깨끗한 URL을 가진 Nginx, 매개 변수 가져 오기 및 PHP-FPM

예를 들어, 보낸 인수에 따라 계정의 어떤 측면을로드 할지를 처리하는 계정 모듈이 있다고 가정 해 보겠습니다. 인수가 ?sk='login'이면 로그인 모듈을로드합니다. ?sk='register'이면 등록 모듈을로드합니다 - 등등.

문제는 내가 http://host/account?sk='login'을 입력 할 때 배열 내의 값을 인쇄하려고 할 때 $_GET을 통해 아무 것도 얻지 못한다는 것입니다. 사실, $_GET 인수를 관리해야하는 파일을로드합니다. 단, 프로세스는$_GET이 아니며 파일 이름 끝에 .php을 지정하지 않으면됩니다.

나는 이것을 허용하는 nginx 또는 php-fpm 구성이 있다고 생각합니다.

이것이 가능합니까?

+0

실제로'account'는'account.php'입니까, 아니면 URL 라우팅을 처리하는'index.php'에 프론트 컨트롤러가 있습니까? – mrlee

+0

실제로'account.base.php'이지만, nginx는'location' 블록을 통해 경로 재 지정을 처리합니다. – zeboidlund

+1

@hakre 사랑을 전파하고 어떻게 끝났는 지 보여주십시오. – zeboidlund

답변

1

나는 그것을 알아 냈 :

아이디어를 nginx를 함께, 위치를 정의하는 위치의 루트를 지정하고으로 $uri 변수 및 실행하는 .php 파일, 을 지정하는 동안 다음 try_files을하는 것입니다 인수들. 예를 들어

: 당신이 당신의 PHP에서 $_GET[ 'key' ]를 호출 할 때

location /somelocation { 
    root /path/to/somelocation/on/server; 
    try_files $uri /somelocation/somefile.php?key=$args; 
} 

오히려 http://host/somelocation?key='someargument'를 입력하는 것보다, 당신은 거기부터

/somelocation?someargument를 지정합니다, 그것은 key의 키를 출력 someargument 것이다. 열쇠는 당신이 무엇이든 지정할 수 있습니다.

+0

이 답변을 구현하기 전에 반드시 읽어보십시오. https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/#root-inside-location-block – Henno