본문 바로가기

개발/Django, DRF

Django 주소 뒤에 슬래쉬 붙이거나 없애기

Django 프레임웍에서 APPEND_SLASH 옵션에 대한 사용법입니다.

Django 에서는 urls.py 에 url 패턴을 정의하는데요. 리퀘스트가 들어오는 url 이 urls.py 에 정의되어 있지 않을 경우 주소 뒤에 슬래쉬를 붙여서 리다이렉트를 시킵니다. 예를 들어 /blog/list 로 접속을 했을 경우 urls.py 에

('^blog/list/$', home_blog.list),

이렇게 blog/list/ 만 정의가 되어 있으므로 Django 는 요청된 url 이 없다고 판단하고 뒤에 슬래쉬를 붙여서 /blog/list/ 로 정의된 url 이 있는지 찾습니다. 위의 경우는 blog/list/ 가 정의되어 있으므로 blog/list/ 로 리다이렉트가 되어서 성공적으로 접속이 됩니다.

이게 문제가 되는 경우가 있는데요. http 와 https 를 같이 쓸 경우 https://www.fun25.co.kr/blog/list 로 접속을 하면 리다이렉트가 http://www.fun25.co.kr/blog/list/ 로 됩니다. 만약 이 페이지가 https 로 접속되어야 하는 페이지라면 문제가 될 수 있습니다. 그래서 settings.py 에

APPEND_SLASH = False

로 설정해 두면 뒤에 슬래쉬를 붙이지 않는데요. 이렇게 되면 blog/list 는 urls.py 에 정의가 되어 있지 않아서 404 Not Found 가 뜹니다. 그래서 urls.py 에

('^blog/list$', home_blog.list),
('^blog/list/$', home_blog.list),

이렇게 슬래쉬가 붙은 주소와 없는 주소를 모두 정의를 해 주어야 합니다. 조금 번거롭기는 하지만 주소를 찾는게 명확해지고 리다이렉트에 대한 문제를 없앨 수 있습니다