Nginx에서 URL을 변경하지 않고 위치를 다른 위치로 리디렉션하려면 어떻게 해야 하나요?

Nginx에서 URL을 변경하지 않고 위치를 다른 위치로 리디렉션하려면 어떻게 해야 하나요?

저는 다양한 제품을 표시하기 위해 웹사이트에서 작업 중입니다. 사용자는 'mydomain.com/product/1.html', 'mydomain.com/product/2.html'과 같은 URL을 통해 다양한 제품 페이지에 액세스할 수 있습니다.

하지만 이러한 정적 HTML 파일을 직접 표시하고 싶지는 않습니다. 대신 mydomain.com/product.php에 먼저 로드되는 PHP 스크립트가 있습니다.

그래서 'mydomain.com/product/1.html'을 'mydomain.com/product.php'로 리디렉션하고 싶지만 원래 URL은 변경하지 마세요.

별칭, try_files, return을 시도했지만 모두 URL을 'mydomain.com/product.php'로 다시 작성했습니다.

저는 Nginx를 처음 접했습니다. 아마도 매우 간단한 질문일 것입니다. 하지만 며칠 동안 이를 달성하려고 노력했습니다.

답변1

할 수 있는 방법이 너무 많아요...

가장 간단한 것은

rewrite ^/product/ /product.php;

~에서섬기는 사람문맥. 원래 요청 URI(예: )를 배열 항목 값 으로 스크립트 /product/1.html에 사용할 수 있습니다 .product.php$_SERVER['REQUEST_URI']

rewrite다음에서 지시문을 사용할 수도 있습니다.위치상황에 따라 이는 약간(매우약간) 더 나은 성능:

location /product/ {
    rewrite ^ /product.php last;
}

원하는 경우 제품 코드를 가져와 product.php쿼리 인수로 스크립트에 전달할 수 있습니다.

rewrite ^/product/(.*)\.html$ /product.php?product=$1;

또는

location /product/ {
    rewrite ^/product/(.*)\.html$ /product.php?product=$1 last;
}

이렇게 하면 제품 코드( 1URI /product/1.html, 2URI 등)를 배열 항목 값 으로 스크립트 /product/2.html에 사용할 수 있습니다 .product.php$_GET['product']

이를 위해 개별 FastCGI 처리기를 정의할 수도 있습니다.

location /product/ {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root/product.php;
    fastcgi_pass <fastcgi_upstream_or_socket>;
}

(원래 요청 URI는 을 통해 제공됩니다 $_SERVER['REQUEST_URI'].) 또는 다음을 통해 제품 코드를 제공하려는 경우 $_GET['product']:

location ~ /product/(.*)\.html$ {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root/product.php;
    fastcgi_param QUERY_STRING product=$1;
    fastcgi_pass <fastcgi_upstream_or_socket>;
}

관련 정보