워드프레스 ‘rest API’ 오류 해결 방법

일하는 곳 사장님께 근황을 전하면서 요즘은 글을 쓴다고 말씀드렸습니다. 워드프레스 블로그도 자랑했습니다. 사장님께서 흔쾌히 방문해주셨지요. 사장님과 휴대폰 화면을 나란히 보고 있었습니다.

그런데 사장님 휴대폰에서 블로그 메인에서 글을 눌러보니 본문 대신 Not Found 페이지가 저희를 반겨주었습니다. 당황해서 제 휴대폰으로도 접속해보았습니다. 제 폰에서도 마찬가지로 오류 페이지만 뜨고 접속되지 않았습니다. 집으로 돌아가는 길 마음이 급해지더군요.

집에 와서 확인해보니 여전히 접속이 되지 않았습니다. 최근에 워드프레스를 조금 건드렸는데, 거기서 문제가 생긴 게 분명합니다. 스킨을 수정했고, 캐시 플러그인을 바꿨고, 파일을 몇 개 정도 수정했습니다.

not found 페이지
반갑게 반겨주는 not found 페이지. 휴…

글이 사라졌을지도 모른다는 걱정에 관리자 글 페이지에 들어가니 다른 오류가 출력되었습니다.

플러그인 json rest API 오류

예상치 못한 네트워크 오류가 발생했습니다! 하나 이상의 WordPress 플러그인이 WordPress REST API를 호출하려 했지만 실패했습니다. 브라우저에 설치된 보안 플러그인, 웹 서버 구성 또는 활성 광고 차단 확장 프로그램이 REST API를 비활성화했을 가능성이 큽니다. 문제 없이 플러그인을 사용하려면 다음 REST API 네임스페이스에 연결할 수 있는지 확인하세요.

노래를 부르고 있는 잔나비 김정훈
뭔 말인지 모르겠어요 난… ©dingo music

나타나는 오류·증상과 시도해본 항목들

워드프레스 오류·증상

증상을 정리하면 이렇습니다.

  • 메인은 접속 가능하지만 포스팅 페이지에 들어가면 ‘Not Found’ 출력
    (페이지를 찾을 수 없음)
  • 관리자 페이지에서 플러그인과 관련된 오류 발생
  • /wp-admin 으로 관리자 페이지는 접속 가능

검색해서 시도해본 항목들

해결하기 위해서 여러 가지를 시도해봤지만 소용없었습니다.

  • wordpress 재설치 파일에서 wp-admin, wp-includes 폴더·파일을 빼내서 서버로 덮어쓰기
  • 모든 플러그인을 비활성화 후 하나하나 활성화해보기
  • ‘관리자 페이지 > 설정 > 고유링크’에서 ‘고유주소 구조'(퍼머링크)를 수정하기
  • 캐시 플러그인에서 모든 캐시를 삭제
  • wp-config.php 수정 (자세한 내용은 기억나지 않음)

오류를 해결한 방법

결국 호스팅에 있는 htaccess 파일을 초기화하니 해결되었습니다. .htaccess 파일을 열어보니 아주 복잡했습니다. 워드프레스 캐시 플러그인 설정을 바꾸면서 htaccess 파일이 꼬인 것 같았습니다.

워드프레스 초기 htaccess 파일 내용

.htaccess 파일을 내려받아서 내용을 모두 삭제하고 아래 내용을 붙여넣은 후 업로드합니다. (이전 파일 백업 필수!)

# BEGIN WordPress

RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress

워드프레스 멀티 사이트를 사용하는 경우에는 추가로 .htaccess를 설정해야 합니다. 왼쪽 위 내 사이트 > 네트워크 관리자 > 설정 > 네트워크 설치에서 추가로 htaccess 파일에서 바꾸어야 할 코드를 확인하세요. 멀티사이트 htaccess 설정을 하지 않을 경우 멀티사이트 접속이 되지 않습니다.

저는 멀티사이트를 사용하고 있어서 위 코드 대신 아래와 같이 코드로 바꾸었습니다.

# BEGIN WordPress

RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]

# END WordPress

결과

다시 되돌아온 워드프레스 글 화면
보고 싶었어! (와락)

이제 잘 나옵니다! 🙂

오류는 워낙에 변수가 많으니 이 방법이 맞지 않을 수도 있겠지요. 최근에 설정이나 파일을 바꾼 게 있는지 생각해보세요. 잘 되다 안 되면 수정한 요소가 문제입니다. 수정 사항을 우선으로 점검해보세요.

블로그에서 오류를 뱉었을 때는 싸늘했었는데 고치고 나니 더 사랑스러워 보입니다. ㅎㅎ 비 온 뒤에 땅이 굳었네요. 같은 문제 겪으신 분들, 블로그가 더 크려고 액땜했다고 생각하시고, 애드센 로또 맞으시기를 기원합니다. 화이팅!


사장님께 받은 블로그 칭찬 '위 개인 블로그 둘러봤어요. 훌륭합니다! 이렇게 차근차근 업데이트하다보면 언젠가 빵 뜰듯'
사장님께 받은 작은 칭찬. 정말로 빵! 떴으면 좋겠습니다.

답글 남기기