시놀로지 가상호스트 적용 시 웹사이트 접속 오류

시놀로지(DSM v6.2.3)에서 운영하고 있는 워드프레스에 PHP 7.4를 적용하려고 인터넷을 찾아보니 ‘Web Station’ 가상 호스트의 ‘PHP’ 값을 (‘PHP 7.4’를 적용한 PHP 설정)을 선택하면 된다는 것이다. 가상 호스트를 사용하지 않고 워드프레스를 운영하고 있는 상태여서 아래와 같이 가상 호스트를 하나 만들었다.

  1. ‘패키지 센터’에서 ‘PHP 7.4’를 설치하고
  2. ‘Web Station’의 ‘PHP 설정’에서
  3. ‘PHP 버전’ 값을 ‘PHP 7.4’로 선택 후 ‘확인’
  4. 이 설정을 적용한 ‘가상 호스트’를 만들었다

그리고 워드프레스 접속을 하니 ‘500’ 오류가 나타나며 접속을 할 수 없었다. 문제는 ‘PHP 설정’할 때 ‘확장(extensions)’에서 아무 것도 선택하지 않았기 때문이었다. 그래서 ‘확장’ 전체를 선택하니 워드프레스가 정상적으로 작동했다.

그런데, 꼭 필요한 확장만 선택하고 싶었다. 인터넷을 검색해 찾은 웹 페이지를 참고해 아래 ‘확장’들만 선택하니 워드프레스가 정상적으로 작동했다.

  • curl
  • exif
  • ftp
  • iconv
  • imagick
  • mysqli
  • openssl
  • zip

시놀로지 워드프레스 수동 업그레이드

시놀로지 워드프레스를 최신 버전(v5.6)으로 업그레이드 했다. 방법은 다음과 같다.

  1. PC에서 최신 버전 워드프레스 다운로드
  2. DSM 접속, File Station 실행
  3. 사용 중인 워드프레스 폴더 이름 변경(/web/wordpress -> /web/wordpress.old)
  4. 다운로드 했던 설치 파일 업로드(위치: /web/wordpress-5.6.zip)
  5. File Station에서 압축 해제(위치: /web/wordpress)
  6. 이전 폴더(/web/wordpress.old)에서 아래 폴더와 파일을 복사해 /web/wordpress에 붙여 넣기
    • wp-content(폴더)
    • .htaccess(파일)
    • pingbackIsOpend(파일)
    • syno-misc.php(파일)
    • wp-config.php(파일)
  7. wordpress 폴더와 하위 파일(폴더 포함)의 사용자(http), 권한(755) 지정

호스트명으로 워드프레스 접속하기

시놀로지에 워드프레스를 /web/wordpress에 설치하니 URL에 하위폴더(www.wildbit.kr/wordpress)를 명시해야 접속할 수 있었다.

그래서, 호스트명으로만 접속하는 방법을 찾아봤다. 인터넷에서 찾은 몇 가지 방법을 시도했는데 잘 되지 않았다.

여러 시행착오를 거친 후에 찾은 해답은 너무 간단했다. 워드프레스 관리자 페이지/설정/일반/Site Address(URL) 링크 페이지(https://wordpress.org/support/article/giving-wordpress-its-own-directory/)에 해답이 있었다.

링크 페이지는 워드프레스를 루트 폴더에 설치하고 하위폴더로 옮겼을 때, ①접속주소를 호스트명으로 하는 방법과 ②서브폴더까지 명시하는 방법을 설명하고 있는데, 인터넷에서 알려줬던 방법은 서브폴더를 명시하는 방법을 마치 호스트명으로 접속하는 방법처럼 알려줬기 때문에 내가 시행착오를 거친 것이었다.

결국 최종 성공한 방법은 ① /web 폴더의 index.html을 삭제하고, ② /web 폴더에 .htaccess 파일을 만들고 그 안에 아래 코드를 넣었더니 호스트명으로만 접속할 수 있었다. 아래 코드에서 ‘example.com’과 ‘my_subdir’은 자신의 것으로 바꾸어야 한다. 나는 ‘www.wildbit.kr’과 ‘wordpress’로 바꾸었다.

<IfModule mod_rewrite.c>

RewriteEngine on

RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/my_subdir/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /my_subdir/$1

RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(/)?$ my_subdir/index.php [L] 

</IfModule>