2012-10-30 4 views
1

PHP는 MVC 스타일 라우터는 일반적으로 index.php?route=one/two/three... 같은 요청 처리 - 앞으로로 구분하여 쿼리 문자열이 같은 폴더> 파일> 기능, 또는 회사> 부서> 프로 시저로 (따라 시스템에게 경로를 제공 슬래시 > 조치).의 nginx 재 작성 규칙을 감소

요청의 예는 다음과 같습니다

set $i /index.php; 
location ~ ^/([a-z0-9-]*)$        { rewrite ^/([a-z0-9-]*)$        $i?route=$1  last; } 
location ~ ^/([a-z0-9-]*)/?([a-z0-9-]*)$    { rewrite ^/([a-z0-9-]*)/?([a-z0-9-]*)$    $i?route=$1/$2 last; } 
location ~ ^/([a-z0-9-]*)/?([a-z0-9-]*)/?([a-z0-9-]*)$ { rewrite ^/([a-z0-9-]*)/?([a-z0-9-]*)/?([a-z0-9-]*)$ $i?route=$1/$2/$3 last; } 

정규식 모범 사례 변경 나에게 소리를 지른다 다음과 같이이 모든 마음에와

GET http://localdomain/user/profile/modify 
    > /index.php?route=user/profile/modify 
    > /user/profile.php 
     > modify() 

, 내 nginx를 서버 구성을 작성했습니다 이것은 하나 이상의 인수를 처리 할 수있는 단일 회선 (아마도 중계기를 사용하여)입니다. 정규 표현식 지식은 제한적입니다. 어떻게 생각합니까?

+2

나는 이것에 대한 대답이 없다. 단지 의견 일 뿐이다. 그런 식으로 작동한다면, 그대로 두라. 3 개의 표현식을 하나로 병합하는 것은 영리한 일일 수 있지만 세 가지 고유 한 표현식을 갖는 것보다 유지 관리가 더 어려울 수 있습니다. – girasquid

답변

1

이 문자 그룹에 슬래시를 추가하여 상관없이 폴더 구조가 얼마나 오래 index.php?route=에 어떤 요청을 보낼 수 없습니다 :

location ~ ^/([a-z0-9\/-]*)$ { rewrite ^/([a-z0-9\/-]*)$ $i?route=$1 last; } 
그것은 기본적으로 폴더 형의 요청에 작동하며 발생하지 않습니다

점이있는 것 (예 : .php.html 등)이므로 index.php 등이 안전합니다.

+0

이전 위치 지시문을 대체하여이를 확인할 수 있습니다. 감사! –