현재 진행중인 프로젝트에서 로컬서버에서는 없었던 문제가 라이브 서버에 업로드 후 발생하였습니다.
문제는 관리자 > 외모 > 위젯 페이지에서 스크립트 오류가 발생하며 위젯을 드래그 & 드롭이 불가능해 지는등 페이지에서의 액션들이 적용되지 않아 위젯의 설정도 바꿀 수 없는 상황이 되었는데요, 처음에는 플러그인 오류라 생각하고 문제가 되는 플러그인을 찾아 비활성화 해 보았지만 문제는 계속 지속되었습니다.
자바스크립트 콘솔을 통해 출력된 오류 내용을 보니
http://{projectsite-hostname}/wp-admin/load-scripts.php?c=1&load%5B%5D=hoverIntent,common,thickbox,underscore,shortcode,media-upload,jquery-ui-core,jquery-ui-widget,jquery-ui-mouse,jquery-ui-sortable&load%5B%5D=,admin-bar,jquery-ui-draggable,jquery-ui-droppable,admin-widgets,svg-painter,heartbeat,wp-auth-check,jquery-ui-resizable,jquery-&load%5B%5D=ui-button,jquery-ui-position,jquery-ui-dialog,backbone,wp-util,wp-backbone,media-models,wp-plupload,mediaelement,wp-mediaelement&load%5B%5D=,media-views&ver=4.3.1
를 브라우저에서 로딩을 하지 못하고 있더군요. 해당 파일(페이지)에 직접 접속을 해 보니 ‘Forbidden’ 오류가 발생을 하네요. 예전에 로컬 서버에 Apache 보안 모듈을 설치했을 때와 워드프레스 보안용 플러그인을 설치했을때도 유사한 경우가 있었던게 나중에서야 기억이 나 URL에 query string(? 이후의 문자들)이 너무 길 경우 해킹으로 간주하는 경우인 것을 예상할 수 있었습니다.
위 주소의 /wp-admin/load-scripts.php… 는 워드프레스에서 해당 페이지에서 필요한 자바스크립트들을 한 번에 모은 뒤 압축(필요없는 공간을 제거하여 용량을 줄임)해서 관리하는 기능을 하는 것입니다.
보안 모듈 혹은 플러그인에 예외 경우를 두는 방법으로도 해결되겠지만, 호스팅회사의 경우 한 사이트 만을 위해서 보안상의 위험을 감수할 수 없기도 하고 예외 경우를 사이트별로 적용하는 구조를 가지지 못한 경우도 있기에 이 문제를 해결하기 어려울 수도 있습니다.
이런 경우 wp-config.php 에 아래 한 줄을 추가하는 방법으로 문제를 간단히 해결할 수 있습니다.
define('CONCATENATE_SCRIPTS', false);
load-scripts.php 로 통합하여 자바스크립트들을 호출하지 않고 각각의 파일들을 따로 호출하도록 하는 정의입니다.