2013-03-14 3 views
2

nginx에서 간단한 다시 쓰기 URL을 만드는 데 어려움을 겪고 있습니다.
내 구성은 다음과 같습니다Nginx 다시 트리거를 다운로드하십시오.

location /foo/bar { 
    rewrite ^/(.+)$ /index.php?p=$1 break; 
} 

일예를 /foo/bar/baz/foo/bar/index.php?p=baz (내부적으로는)

이되어야합니다. 그러나 /foo/bar/을 통해 액세스하는 모든 것은 루트에있는 index.php를 다운로드합니다. 어떻게 작동 시키나요?

나는 또한 try_files을 사용해 보았지만, $uri에서 /foo/bar/ 경로를 제외하는 방법을 알아낼 수 없습니다.

답변

10

변경

rewrite ^/(.+)$ /index.php?p=$1 break; 

rewrite ^/(.+)$ /index.php?p=$1 last; 
http://wiki.nginx.org/HttpRewriteModule#rewrite을 바탕으로

,

지난 - 현재 재 작성 지침의 처리를 완료와 함께 (재 작성 포함) 과정을 다시 시작 t에 대한 성냥 검색 사용 가능한 모든 위치의 URI.

[편집] 휴식을 사용하면 같은 위치 블록 안에 머무르게됩니다. 귀하의 경우에는 해당 위치 블록 내에 다른 규칙이 없습니다. 그래서 기본적으로 nginx는이를 파일 요청으로 제공합니다.

+0

와아 솜, 그렇게했습니다. 무리 감사! –

+1

+1 그리고 나는 그들이 똑같은 사람이라고 생각했다. – Bart

+0

np. 당신의 재 작성 규칙이 당신이 원하는 것을 제공하는지 확신하지 못한다. 하지만 '마지막'을 사용하면 문제가 해결됩니다. :) –

0

PHP 파일은 해석되지 않고 일반 파일로 취급됩니다. FPM과 같은 CGI 서버를 설정하고 해당 프로세스에 연결을 전달해야합니다.

내가 왜 예를 나누기 모르겠어요 자세한

UPDATE

에 대한 http://wiki.nginx.org/Configuration를 참조하십시오. 하지만 내 생각에 rewritetry_files으로 변경해야합니다.

location /foo/bar { 
    try_files $uri $uri/ /index.php?p=$uri; 
} 
+0

어디서나 php 파일에 액세스 할 수 있습니다. 이 단일 규칙만으로이 동작을 만듭니다. –

+0

서버 설정과 관련된 자세한 정보가 있습니까? – Bart

+0

어떤 정보가 필요한지 잘 모르겠습니다. 서버 구성에 대한 경험이 전혀 없습니다. 친구가 나 한테 전에 그것을 세웠다. 여기에 내'nginx.conf'가 도움이 될 것입니다 : http://pastebin.com/8ubv4Jn4 –