Nginx 에 thinkphp URL 재 작성 설정

5431 단어
머리말
회사 프로젝트 에 thinkphp 프레임 워 크 를 사용 하여 apache 에 배치 하 는 것 이 편리 합 니 다. thinkphp 홈 페이지 의 doc: Apache URL 재 작성 을 참고 할 수 있 습 니 다.
한편, nginx 에서 인터넷 에 구체 적 인 문서 가 없 는데 모두 자신의 프로젝트 에 따라 배치 되 고 다른 프로젝트 를 받 으 면 통 하지 않 기 때문에 본인 의 연 구 를 통 해 낚시 방법 을 알 게 되 었 습 니 다!
thinkphp 를 사 용 했 으 니 URL Mode 에 대해 알 아야 합 니 다.doc: URL 모드 를 참고 할 수 있 습 니 다.
준비 작업
먼저 모든 준 비 를 해 야 합 니 다. 예 를 들 어 nginx 가 시작 되 었 고 프로젝트 가 배치 되 었 지만 PATHINFO 나 REWRITE 링크 를 사용 하여 페이지 에 404 가 나타 납 니 다.
여기에 사 용 된 항목 (프로젝트 이름 이 NicePrj 라 고 가정) 의 구 조 를 간단하게 설명 합 니 다.
  • thinkphp 프레임 워 크
  • 여러 개의 procject 가 있 는데 애플 리 케 이 션 디 렉 터 리 에 통일 적 으로 놓 여 있 습 니 다
  • URL MODE 는 REWRITE, 즉 URL 설정MODEL 은 2
  • REWRITE 링크 는 다음 과 같 습 니 다. (사용자 로그 인 페이지)http://www.....com/appliction/prj3/user/login

  • 디 렉 터 리 구조 가 이 럴 수도 있 습 니 다.
    /var/www/html/niceprj/
    	application/
    		prj1/
    		prj2/
    		prj3/
    		  Common/
    		  Conf/
    		  js/
    		  Lang/
    		  Lib/
    		  Runtime/
    		  Tpl/
    		  index.php
    	thinkphp/
    	static/
    	index.php

    우선 호 환 모드 로 정상적으로 접근 할 수 있 는 지 확인 합 니 다. 위의 사용자 가 페이지 에 로그 인하 고 호 환 모드 의 링크 를 사용 하면 이렇게 쓸 수 있 습 니 다.
    http://www.....com/appliction/prj3/?m=user&a=login
    index. php 를 추가 하거나:
    http://www.....com/appliction/prj3/index.php?m=user&a=login
    호 환 모드 에서 페이지 에 접근 할 수 있다 면 성공 에서 멀 지 않 습 니 다!
    Nginx. conf 설정
    첫 번 째 설정
    location / {
        root   /var/www/html/niceprj;
        index  index.php index.html index.htm;
        if (!-e $request_filename) {
    		rewrite  ^/application/prj1/(.*)$  /application/prj1/index.php/$1  last;
    		rewrite  ^/application/prj2/(.*)$  /application/prj2/index.php/$1  last;
                    rewrite  ^/application/prj3/(.*)$  /application/prj3/index.php/$1  last;
                  break;
    	}	
    }

    만약 에 그 부분 이 중점 이 고 저 는 세 줄 rewrite 를 정 의 했 습 니 다. 우리 가 이해 해 야 할 것 은 두 번 째, 세 번 째 매개 변수 입 니 다.
    두 번 째 매개 변수: 어떤 주 소 를 rewrite 하고 주소 의 어느 부분 을 URL 매개 변수 로 전달 할 지 지정 합 니 다.여기 서 / application / prj 1 / 뒤에 있 는 내용 은 URL 매개 변수 로 여 겨 집 니 다.
    이 정의 에 맞 는 링크 는 세 번 째 매개 변수 가 정의 하 는 규칙 으로 rewrite 됩 니 다.
    세 번 째 매개 변수: 두 번 째 매개 변 수 를 처리 한 URL 매개 변수 입 니 다.
    예 를 들 어 사용자 로그 인 페이지 에 접근 하기:http://www.....com/appliction/prj3/user/login
    user / login 은 URL 매개 변수 로 세 번 째 매개 변수 에 전 달 됩 니 다. rewrite 후의 주 소 는 다음 과 같 습 니 다.http://www.....com/appliction/prj3/index.php/user/login
    두 번 째, 세 번 째 매개 변 수 는 같 을 수 없습니다.   ^/application/prj1/(.*)$   /application/prj1/$1  last;
    그러면 페이지 는 끊임없이 새로 고침, 새로 고침, 새로 고침... 순환!이때 첫 번 째 일 은 바로 창 을 끄 는 것 이다!
    2 단계 설정
    location ~ .+\.php($|/){
    	set $script    $uri;
    	set $path_info  "/";
    	if ($uri ~ "^(.+\.php)(/.+)") {
    		set $script     $1;
    		set $path_info  $2;
    	}
        root           /var/www/html/niceprj;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/html/niceprj$fastcgi_script_name;
        fastcgi_param  PATH_INFO $path_info;
        include        fastcgi_params;
    }

    위의 설정 을 통 해 fastcgi 는 PATHINFO 모드 의 링크 요청 을 지원 합 니 다. 첫 번 째 설정 에서 rewrite 후의 주 소 는 여기에서 처리 합 니 다. 즉, phop - cgi 에 맡 기 는 것 입 니 다.
    이렇게 되면 훨씬 간단 합 니 다. 사이트 디 렉 터 리 경 로 를 수정 하고 / var / www / html / niceprj 를 자신의 것 으로 바 꾸 십시오.정규 표현 식 처럼 보 이 는 다른 것들 은 신경 쓰 지 마 세 요.
    3 단계 설정
    location ~ /\.ht {
        deny  all;
    }

    nginx 가. htaccess 파일 을 읽 지 못 하 게 합 니 다!
    총결산
    3 단계 설정 을 통 해 이 설정 이 완료 되 었 습 니 다. 전체 설정 은 이렇게 보 입 니 다.
    user  nobody;
    worker_processes  5;
    error_log  logs/error.log  info;
    pid        logs/nginx.pid;
    events {
        use epoll;
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile      on;
        tcp_nopush    on;
        tcp_nodelay   on;
        keepalive_timeout  10;
        gzip  on;
        server {
            listen       8080;
            server_name  localhost;
            charset utf-8;
            location / {
                root   /var/www/html/niceprj;
                index  index.php index.html index.htm;
                if (!-e $request_filename) {
    			     rewrite  ^/application/prj1/(.*)$  /application/prj1/index.php/$1 last;
    			     rewrite  ^/application/prj2/(.*)$  /application/prj2/index.php/$1 last;
                                 rewrite  ^/application/prj3/(.*)$  /application/prj3/index.php/$1 last;
                                 break;
            	}	
            }
            #location ~ \.php$ {
            location ~ .+\.php($|/){
            	set $script    $uri;
        		set $path_info  "/";
         		if ($uri ~ "^(.+\.php)(/.+)") {
            		set $script     $1;
            		set $path_info  $2;
         		}
                root           /var/www/html/niceprj;
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  /var/www/html/niceprj$fastcgi_script_name;
                fastcgi_param  PATH_INFO $path_info;
                include        fastcgi_params;
            }
            location ~ /\.ht {
                deny  all;
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    }

    테스트
    브 라 우 저 를 열 어 테스트 해 보 세 요. 잘못된 부분 (예 를 들 어 404, 502, 페이지 순환 모양 이 계속 새로 고침 (바로 페이지 꺼!) 이 있 으 면 로그 파일 을 보 세 요. 기본 값 은 error 입 니 다.로그 파일.
    로그 파일 에서 어떤 링크 를 요 청 했 는 지, 어떤 링크 로 전 환 했 는 지 볼 수 있 습 니 다.
    보통 문제 가 발생 하면 첫 번 째 설정 에 있 는 rewrite 부분 입 니 다. 자신의 프로젝트 의 디 렉 터 리 구조 에 따라 조정 해 야 합 니 다.

    좋은 웹페이지 즐겨찾기