2016-07-12 3 views
1

나는 동적 문자열 인 물론 사용자 (Facebook과 같은)를 위해 "개인 URL"을 만들 수 있기를 바랍니다. 그것은 사이트의 뿌리에 있어야하고, 그 이유는 그것으로 큰 두통을 겪고 있습니다. 내가 가진Nginx가 "개인 URL"을 만들기 위해 다시 작성

요구 사항은 다음과 같습니다

1 내가 www.example.com/John.Doe 필요 (. 그것은-ZA-Z0-9_- 될 수 있습니다)

및 로 재 작성 :

www.example.com/profile?id=John.Doe

2는 또한 t에 내가 할 수 있었다 이하와 같은 확장 (로 사이트 스크립트를 필요 여기에 그가 큰 사람, 사용하는 "$ uri.php $ is_args $ QUERY_STRING;") : www.example.com/login.php

을 :

그렇게 www.example.com/login~~HEAD=V이로 이동합니다

많은 일을 시도했지만 제대로 작동 할 수있는 공식을 얻을 수 없습니다. 당신은 당신의 확장이없는 스크립트와 개인의 URL에 대한 중복 네임 스페이스를

location/{ 
    try_files $uri $uri/ $uri.php$is_args$query_string; 
} 

location ~ \.php$ { 
    if ($request_uri ~ ^/([^?]*)\.php(\?.*)?$) { 
     return 301 /$1$2; 
    } 
    try_files $uri =404; 
    include /etc/nginx/fastcgi_params; 
    fastcgi_pass 127.0.0.1:9001; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
} 

답변

0

, 그래서 당신은 profile.php로 재 작성하기 전에 $uri.php 파일의 존재를 테스트 할 필요가 : 이 지금 내 구성입니다.

첫 번째 try_files 지시어의 URI를 다시 쓰는 대신 (지금 당장) URI 파일을 다시 작성하지 않고 PHP 파일을 처리하는 데 이름이 지정된 위치 블록을 사용하는 것이 좋습니다. 이와 같이

는 :

location/{ 
    try_files $uri $uri/ @php; 
} 

location @php { 
    try_files $uri.php @rewrite; 

    include /etc/nginx/fastcgi_params; 
    fastcgi_pass 127.0.0.1:9001; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
} 

location @rewrite { 
    rewrite ^/([a-zA-Z0-9_.-]+)$ /profile.php?id=$1 last; 
} 

location ~ \.php$ { 
    if ($request_uri ...) { ... } 

    try_files $uri =404; 
    include /etc/nginx/fastcgi_params; 
    fastcgi_pass 127.0.0.1:9001; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
} 

첫번째 블록은 정적 파일을 제공. 두 번째 블록은 확장이없는 PHP 파일을 처리합니다 (존재하는 경우에만). 세 번째 블록은 profile.php (클라이언트에 노출되지 않으므로 확장 기능이 필요하지 않음)으로 재 작성합니다. 네 번째 블록은 일반적인 .php 개의 URI를 처리하며 $request_uri 수정 사항을 포함합니다.

fastcgi_index은 원래 구성과 중복되어 있습니다.

자세한 내용은 location, try_filesrewrite 지시어에 대한 nginx 설명서 링크가 있습니다.

+0

대단히 감사합니다!, 잘됐다. 나는 여기서 새로운 사람으로 투표를 할 수 없다. – Trocker

+0

SO에 오신 것을 환영합니다 .--) 나는 또한 내 대답에 대한 몇 가지 참조를 추가했습니다. –