
저는 다양한 제품을 표시하기 위해 웹사이트에서 작업 중입니다. 사용자는 '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;
}
이렇게 하면 제품 코드( 1
URI /product/1.html
, 2
URI 등)를 배열 항목 값 으로 스크립트 /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>;
}