2015-01-22 2 views
0

Nginx 1.6.2를 사용하고 있습니다. 내가()를 사용하지 않고 내가 원하는 것을 할 수 없기 때문에,()가 악하고 그것은 그것을 사용하지 않아서 약간의 도움이 필요하다는 것을 읽었다. 내가 가지고있는 규칙을 게시하고 만약 누군가가 나를 도울 수 있다면 if()를 사용하지 말고 다른 것을 사용하고 같은 결과를 얻을 수 있는지 물어볼 것입니다.이블 일 경우 - Nginx

# REDIRECT NON-WWW TO WWW. 
if ($http_host != "www.site.eu") { 
    rewrite^http://www.site.eu$request_uri permanent; 
} 

# REMOVE INDEX FILES FROM URL FOR SEO PURPOSE. 
if ($request_uri ~ "/index.php") { 
    rewrite^/$1 permanent; 
} 

# REMOVE ANY MULTIPLE SLASHES IN THE URL. 
if ($request_uri ~* "\/\/") { 
    rewrite ^/(.*) $scheme://$host/$1 permanent; 
} 
+0

첫 번째 블록은 별도의 서버 블록으로 교체해야합니다. 두 번째 및 세 번째는 99 %의 경우에 필요하지 않습니다. –

+0

@Alexey Ten - 첫 번째 블록을 separete 서버 블록으로 대체해야하고 separete 서버 블록 인 server {}를 어떻게 사용합니까? 당신이 의미하는 바를 이해하지 못했기 때문에 올바른 규칙을 줄 수 있습니까? –

+0

첫 번째 규칙은 Alexey Ten의 제안에 따라 처리해야합니다. 두 번째 규칙은 조금 의미가 없으므로 실제로 필요한 경우 Alexey의 "일반 구성"서버 블록에서 재구성해야합니다. 세 번째 규칙은 nginx에 의해 자동으로 처리되며 전혀 필요하지 않습니다. – Dayo

답변

1

In the official wiki introduction 괜찮 으면 어떤 경우가 있다고합니다. 이 인용문에서보세요 :

유일한 100 % 위치 상황에서 경우 내부 수행 할 수 있습니다 안전 일들은 다음과 같습니다

복귀 ...; 재 작성 ... 마지막;

도입부 끝에는 다시 쓰기 명령이있는 예가 있습니다. 그래서 코드도 괜찮아 보입니다.

편집 : how the if works도 확인해야합니다.

3

첫 번째 규칙은

server { 
    listen 80 default_server; 
    return 301 http://www.example.com$request_uri; 
} 

server { 
    listen 80; 
    server_name www.example.com; 

    # normal config 
} 

다른 if의 일반적으로 필요하지 않은 별도의 서버 블록으로 교체해야합니다. index.php으로 링크를 생성하지 마십시오. 링크를 제거 할 필요가 없습니다.

1

당신은 내가 또한 기본적으로 nginx를 자동으로 처리합니다 이중 // 때문에위한 마지막 규칙에 대해 걱정할 필요가 있다고 생각하지 않습니다이

location ~ ^/index.php/(.*[^/])$ { return 301 $scheme://$host/$1/$is_args$args; } 
location ~ ^/index.php/(.*)/$ { return 301 $scheme://$host/$1/$is_args$args; } 

과이 블록

# REMOVE INDEX FILES FROM URL FOR SEO PURPOSE. 
if ($request_uri ~ "/index.php") { 
    rewrite^/$1 permanent; 
} 

을 대체 할 수 그 전에 심지어 일치하는 위치 블록의 지점에 도착

+0

감사합니다. 마지막 규칙은 필요하지 않습니다. 이중 문자가 없으면 // 여전히 나타납니다. nginx는 당신이 말한 것처럼 자동으로 제거하지 않습니다. –

관련 문제