본문 바로가기

리눅스

Nginx에서 URL 재작성 규칙을 설정하는 방법

반응형

Nginx에서 URL 재작성(Rewrite) 규칙을 설정하는 방법

Rewrite 규칙을 설정에는 rewrite 지시어와 try_files 지시어를 사용합니다.

 

1. 특정 URL을 다른 URL로 리디렉션 (301/302 리다이렉트)

location /old-page {
    return 301 https://example.com/new-page;
}
  • /old-page로 접근하면 /new-page로 영구 리디렉션(301)됨
  • 302 리다이렉트를 하려면 return 302로 변경

2. URL 패턴 변경 (rewrite 사용)

location /blog {
    rewrite ^/blog/(.*)$ /articles/$1 break;
}
  • /blog/some-post → /articles/some-post로 변경
  • break는 해당 지점에서 처리 종료

3. 특정 패턴에 대해 리다이렉트

rewrite ^/old/(.*)$ /new/$1 permanent;
  • /old/anything → /new/anything로 영구 리디렉션(301)

4. 정규 표현식을 이용한 URL 변환

location ~* ^/category/(.*)/product/(.*)$ {
    rewrite ^/category/(.*)/product/(.*)$ /shop?cat=$1&item=$2 break;
}
  • /category/electronics/product/laptop → /shop?cat=electronics&item=laptop
  • ~*는 대소문자 무시

5. try_files를 활용한 동적 파일 처리

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
  • 존재하는 파일이면 해당 파일을 사용
  • 폴더라면 index.php 처리
  • 없으면 /index.php?query_string으로 전달

6. PHP 파일 실행 설정

location ~ \.php$ {
    fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}
  • .php 파일 요청을 PHP-FPM으로 전달

7. 특정 URL에서 PHP 실행 허용

location ~ ^/app/(.+\.php)$ {
    rewrite ^/app/(.*)$ /$1 break;
    root /var/www/html;
    fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}
  • /app/something.php → /var/www/html/something.php에서 실행

8. 정적 파일 캐싱 및 압축

location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2|ttf|otf|svg|mp4|webm)$ {
    expires 30d;
    add_header Cache-Control "public, max-age=2592000";
    access_log off;
}
  • 이미지, CSS, JS 파일을 30일 동안 캐싱

9. 내부적으로 다른 경로로 매핑

location ~ ^/news {
    rewrite ^/news(.*)$ $1?$args break;
    alias /app/news/www/public;
}
  • /news/index.php → /index.php로 변환하여 PHP 실행

 

728x90
반응형