위치 / {

위치 / {

동일한 사이트 내에서 문제를 일으키는 몇 가지 수정 사항과 추가 소프트웨어가 있는 vBulletin 포럼에 대한 nginx 재작성 규칙을 정리하려고 합니다. 나는 일이 제대로 작동하고 있지만nginx If is Evil걱정이 되어서 대신 이러한 몇 가지 규칙을 try_files로 변환해 보고 싶습니다.

현재는

  1. 정적 이미지 및 파일에 대한 규칙으로 SEO 모드(예: .gif,.ico, 심지어 .css)로 전달되지 않습니다.

  2. tapatalk 플러그인이라고도 불리는 하위 폴더 mobiquo에 대한 규칙입니다. 이것이 작동하려면 전체 디렉토리를 다시 쓰기에서 제외해야 했습니다.

  3. 파일이 존재하지 않는 경우. 그것이 얼마나 중요한지는 잘 모르겠지만 좋은 생각인 것 같습니다. 어쩌면 SEO 모드의 작업량을 낮추기 위한 것일 수도 있습니다.

명백히 위험한 If 블록 형식의 nginx 재작성 규칙은 다음과 같습니다.

이것은 우선순위를 부여하고 싶었기 때문에 /forum/ 블록 위에 있습니다. 이것이 부적절하게 수행된 경우 알고 싶습니다.

    location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
            # Some basic cache-control for static files to be sent to the browser
            expires max;
            add_header Pragma public;
            add_header Cache-Control "public, must-revalidate, proxy-revalidate";
    }

    location /forum/ {

            try_files $uri $uri/ /forum/dbseo.php?$args;

            if ($request_uri ~* ^/forum/mobiquo) {
                    break;
            }

            if (-f $request_filename) {
            expires 30d;
                    break;
            }

            if ($request_filename ~ "\.php$" ) {
                    rewrite ^(/forum/.*)$ /forum/dbseo.php last;
            }


            if (!-e $request_filename) {
                    rewrite ^/forum/(.*)$ /forum/dbseo.php last;
            }

    }

내 검색 어딘가에서 적응하려고 시도한 템플릿을 찾았지만 정규식을 이해하지 못하기 때문에 실패했습니다. :)

위치 / {

            # if you're just using wordpress and don't want extra rewrites
            # then replace the word @rewrites with /index.php

try_files $uri $uri/ /index.php;

}

위치 @rewrites {

            # Can put some of your own rewrite rules in here
            # for example rewrite ^/~(.*)/(.*)/? /users/$1/$2 last;
            # If nothing matches we'll just send it to /index.php

try_files $uri $uri/ /forum/dbseo.php?$args;

^ /index.php를 마지막으로 다시 작성하세요.

^(/.php)$ /forum/dbseo.php를 마지막으로 다시 작성하세요.

}

답변1

질문을 정리하려고 노력하세요. 특히 질문의 마지막 부분에서는 코드를 제공하는 대신 소리를 지르게 됩니다.

질문 상단에 제공한 구성을 바탕으로 다음과 같이 결론을 내렸습니다.

location /forum/ {
    index dbseo.php; # You obviously wish to send everything erroneous/inexistent to dbseo.php, any index.php file would suffer the regex location below
    try_files $uri $uri/ /forum/dbseo.php?$args; # Any inexistent file/directory will be handled over to /forum/dbseo.php

    location ^~ /forum/dbseo.php { # Avoids matching the regex location below (performance)
    }

    location ^~ /forum/mobiquo { # Avoids matching any other rules
    }

    location ~* \.php$ {
        try_files /forum/dbseo.php =404;
        # Be careful here, try to secure your location since the regex can still be manipulated for arbitrary code execution
    }
}

중첩된 위치는 잠재적으로 충돌하는 위치 블록을 격리하는 데 유용합니다. 정규식 위치는 순차적으로 평가되므로 위치 블록 순서가 영향을 미치는 것을 방지하려면(Apache 구성과 마찬가지로 혼란스럽습니다) 정규식 위치 중 여러 개가 서로 뒤따르는 것을 방지하기 위해 항상 정규식 위치를 접두사 1로 묶어야 합니다.

당신은에 대해 배울 수 있습니다location설명서 페이지의 수정자.

어쩌면 더 많은 세부 정보가 있을 수도 있지만 제 예에는 필요한 기본 정보가 모두 들어 있습니다. 귀하의 필요에 더 잘 맞도록 이를 이해/개선하는 것은 귀하의 몫입니다. :영형)

관련 정보