2010-03-23 7 views
8

나는부터 다시 작성하는 nginx를 재 작성 규칙이 필요합니다.의 nginx 하위 도메인 다시 쓰기

당신은 나를 어떻게이 두 가지 규칙을 작성,이 문제를 해결하는 데 도움이 될 수주십시오? 그것이 가능하면 간단하게

server { 
    server_name example.com ~^(.*)\.example\.com$ ; 

    rewrite^/keyword.php?keyword=$1 break; 

# location /keyword.php { 
# .... 
# } 
} 
+0

당신은 재 작성 (서버 측 에서처럼 프록시 재 작성)이라고 말하지만 리디렉션하는 것처럼 들릴까요? 리디렉션에서 사용자가 볼 수있는 URL이 변경됩니다. 프록시 재 작성에서 모든 것은 서버 측에서 발생하며 사용자에게는 보이지 않습니다. – conny

+0

사용자가 볼 수있는 내용은 http://keyword.example.com입니다. Conny – ivan73

답변

7

당신은 다음, 리디렉션 의미하는 경우 호스트) 보통 domain.com/www.domain.com 인 다음 conf를 사용하여 나머지를 다시 작성하십시오

내가 뭔가를 놓친 경우
server { 
    server_name domain.com www.domain.com; 
    # normal handling for files 
} 

server { 
    server_name ~(?<subdomain>[^\.]*).domain.com; 
    location/{ 
     try_files keyword.php?keyword=$subdomain =404; 
    } 
} 

말해주십시오.

+1

다시 작성하는 것과 관련하여 질문을해도 "www"는 제외해야합니다. '^ ((?! www \.). *) \. example \ .com $' – conny

+0

Nginx는 다음과 같은 서버 검색 순서가 있기 때문에 부정적인 미리보기를 사용하지 않고 구성을 확인해야합니다. 전체 이름 (www.example.com)은 정규 표현식 앞에옵니다. –

+0

비슷한 문제가 있지만이 솔루션은 호스트를 다시 쓰지 않는 것 같습니다. OP에서 그는 규칙이 완료되었을 때 서버가 www.example.com/keyword.php?keyword=$1을 처리 할 것을 요청했지만 경로와 쿼리 만 다시 쓰는 것처럼 보입니다. 호스트를 내부적으로 다시 쓰는 방법이 있습니까? 리디렉션을 사용한 예제 만 보았고 모든 실험이 실패했습니다. 감사. –

2
rewrite ^/list-c-([0-9]+)-k-(.+)-o-1\.html$ /index.php?module=Default&action=List&c=$1&k=$2&o=1 last; 
rewrite ^/list-c-([0-9]+)-k-(.+)-o-1-p-(.+)\.html$ /index.php?module=Default&action=List&c=$1&k=$2&o=1&p=$3 last; 
rewrite ^/list-c-([0-9]+)-k-(.+)-o-1-price-(.+)\.html$ /index.php?module=Default&action=List&c=$1&k=$2&o=1&price=$3 last; 
rewrite ^/list-c-([0-9]+)-k-(.+)-o-(.+)-p-1\.html$ /index.php?module=Default&action=List&c=$1&k=$2&o=$3&p=1 last; 
rewrite ^/list-c-([0-9]+)-k-(.+)-o-(.+)-p-(.+)\.html$ /index.php?module=Default&action=List&c=$1&k=$2&o=$3&p=$4 last; 
0

할 난 단지 (가상 한 서버를 만들 것

server { 
    server_name ~^(.*)\.example\.com$ ; 

    rewrite^http://www.example.com/keyword.php?keyword=$1 redirect; 
} 

을 다음 재 작성의 경우 :

관련 문제