Nginx 에서 ThinkpHP 를 지원 하 는 Pathinfo 와 URL Rewrite 모드

3570 단어 mongodb
나의 환경
시스템:   Ubuntu12.04    x86_64
환경:   Nginx1.1.19+PHP5.3.10+Mongo2.6.3
회사 에서 Nginx + Mongo + PHP 를 사용 해 야 하기 때문에 방금 설 치 된 LAMP 를 뒤 집 고 LNMP 를 다시 설치 하 겠 습 니 다.소프트웨어 설 치 는 여기 서 소개 하지 않 습 니 다. 필요 하 시 면 여 기 를 보 세 요.
Nginx 설치 방법
Nginx 가 ThinkpHP 의 Pathinfo 와 URL Rewrite 모드 를 지원 하 는 방법 을 소개 한다.
1. ThinkpHP 는 ThinkpHP 의 공식 해결 방안 을 제 시 했 는데 다음 과 같다.
Nginx 프로필 을 엽 니 다. / etc / nginx / nginx. cof 는 보통 이 경로 에 있 습 니 다. 설치 경로 에 따라 달라 질 수 있 습 니 다.vhost 를 설정 하고 이 vhost 가 pathinfo 를 지원 하기 만 하면 vhost 설정 파일 을 직접 열 수 있 습 니 다.다음 과 같은 코드 를 찾 습 니 다 (버 전의 nginx 는 조금 다 를 수 있 지만 차이 가 크 지 않 습 니 다).
    location ~ .php
        {
                #    
                
                #     $path_info ,    pathinfo  
                set $path_info "";
                #     $real_script_name,        
                set $real_script_name $fastcgi_script_name;
                #                
                if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
                        #           $real_script_name
                        set $real_script_name $1;
                        #               $path_info
                        set $path_info $2;
                }
                #  fastcgi     
                fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
                fastcgi_param SCRIPT_NAME $real_script_name;
                fastcgi_param PATH_INFO $path_info;
        }

이렇게 하면 nginx 서버 는 pathinfo 를 지원 할 수 있 습 니 다.하지만 ThinkpHP 의 URL 을 지원 하려 면MODE 가 2 로 설 정 된 모드 는 rewrite 규칙 도 설정 해 야 합 니 다.access 찾기log 문 구 는 그 위 에 다음 과 같은 문 구 를 추가 합 니 다.
    #           ,       ,         
    if (!-e $request_filename)
    {
            #       rewrite index.php 。
            rewrite ^/(.*)$ /index.php/$1;
            #            , subdir        。
            #rewrite ^/subdir/(.*)$ /subdir/index.php/$1;
    }

이상 의 방법 은 ThinkpHP 가 공식 적 으로 제시 한 것 이지 만 틀림없이 검 증 된 것 일 것 이다. 그러나 슬 픈 것 은 나 에 게 효과 가 없다 는 것 이다.
2. 나의 해결 방안
저 는 sites (vhost) 에서 설정 한 것 입 니 다. / etc / nginx / sites - available / 디 렉 터 리 에 있 습 니 다.물론 당신 도 직접 / etc / nginx / nginx. conf 에서 설정 할 수 있 습 니 다.그리고 php 설정 항목 에 다음 두 줄 을 추가 합 니 다.
fastcgi_split_path_info ^(.+\.php)(.*)$;                             
fastcgi_param PATH_INFO $fastcgi_path_info; 

전체 설정 은 다음 과 같 습 니 다.
 location ~ \.php$ {
                root /var/www;
                try_files $uri = 404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
        #       # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
        #
        #       # With php5-cgi alone:
                #fastcgi_pass 127.0.0.1:9000;
                fastcgi_split_path_info ^(.+\.php)(.*)$;
                fastcgi_param PATH_INFO $fastcgi_path_info;
        #       # With php5-fpm:
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }


대 보 일기 판권 소유, 전재 출처 밝 혀 주세요.주소

좋은 웹페이지 즐겨찾기