.htaccess와 워드프레스 퍼머링크

By | 2005-04-08

워드프레스에서는 퍼머링크 주소를 index.php?p=1 의 형태가 아닌 /archive/1 처럼 보기좋게 표시할 수 있는 방법을 제공하고 있다. 접속하는 URL의 흐름을 제어하기 위해 아파치 웹서버의 mod_rewrite모듈을 이용하여 .htaccess 파일을 작성한다. 관리자화면(설정->퍼머링크, 영문판일 경우 Options->Permalinks)에서 퍼머링크의 규칙만 정해주면 워드프레스가 자동으로 .htaccess 파일내용을 작성해주는데 이 경우 스팸리퍼러 처리를 위해 .htaccess 파일에 작성한 스패머 주소 목록이 사라지게 된다. 즉, 스팸리퍼러 차단을 위해서 .htaccess파일을 수동으로 고쳐놓으면 워드프레스의 관리자메뉴에서 다시 .htaccess 파일을 자동으로 수정을 해버린다. 설령 사용자가 퍼머링크 규칙을 고치지 않는다 하더라도 퍼머링크 설정메뉴를 열기만 해도 .htaccess파일은 저절로 수정된다. 허드옹 께서 이 문제를 해결해 주셨다. 리퍼러 차단목록을 .htaccess 파일에 직접 입력하지 않고 antispam.txt 파일에 작성을 해놓으면 워드프레스에서 .htaccess 파일을 재작성 할 경우 이 antispam.txt파일을 불러와서 규칙에 맞게 삽입시키도록 변경하였다.

  1. 자신의 워드프레스 디렉토리에 antispam.txt 파일을 만든다.
  2. 워드프레스가 설치된 디렉토리아래 wp-include에서 classes.php 파일을 연다. (백업 필수)
  3. 1222번째 줄 근처에서 $rules .= “</IfModule>\n”; 를 찾는다. 이 줄의 바로 윗줄에 아래의 내용을 추가한다.

    //
    // don't forget my own rules
    //
    $fullpath = "/antispam.txt의 위치";
    if ( file_exists( $fullpath ) ) {
    $rules .= "# begin: anti-spam rules\n";
    $handle = @fopen( $fullpath, "r" );
    $rules .= @fread( $handle, @filesize( $fullpath ) );
    $rules .= "\n";
    @fclose( $handle );
    }
    // end of modification.
  4. 위의 코드에서 antispam.txt의 서버에서의 위치를 수정한다. antispam.txt가 설치된 디렉토리에서 pwd라고 치면 현재의 디렉토리를 알려준다. 그 경로에 antispam.txt를 붙여준다. 예를 들면 이런식이다. /home/hof/www/wp/antispam.txt
  5. 저장한다.

앞으로는 antispam.txt 파일만 관리해주면 워드프레스 관리자가 .htaccess 파일을 업데이트할때 리퍼러 스팸차단 규칙을 .htaccess 파일의 맨 아래에 # begin: anti-spam rules 라는 줄 아래로 추가시켜주게 된다.
[업데이트]#1@2005/09/15
워드프레스 1.5.2 버젼인 경우 </ifModule>은 1250번째줄 근처다.

17 thoughts on “.htaccess와 워드프레스 퍼머링크

  1. John Doe

    퍼머링크 주소를 그렇게 바꾸려면 mod_rewrite를 지원하는 계정이어야 되죠?
    호스팅 회사에 문의했는데 지원해 줄 수 없다고 하더라고요.

  2. hof Post author

    John Doe// 그렇죠. mod_rewrite를 지원안해주면 아마 index.php/archive/1 이런식으로 되야될겁니다. ssel.com 쓰시는것 같네요. 제가 이전할때 알아보니까 cafe24.com 하고 byus.net 이 지원하는것 같더군요.

  3. John Doe

    네. 답변 고맙습니다.
    저도 그 방법은 아는데 별로 모양새가 안 나더라구요. 🙁
    그래서 그냥 기본으로 쓰고 있습니다. sshel.com 호스팅이 좀 유명한 것 같아서 당연히 지원할 줄 알았는데 좀 아쉽더라구요.

  4. hof

    John Doe// 모양새 빼고는 별 차이 없습니다. 제가 예전에 b2쓸때 지금 wp와 똑같은 식으로 URL모양이 구성되었는데요 ( index.php?p=숫자) 검색엔진에 잘 수집되고 스팸도 무쟈게 오고 그랬습니다. 암튼 저도 ivyro.net 에 호스팅 몇개 들어간게 있어서 그쪽으로 이 블로그 옮길까 해서 물어봤는데요. 그냥 거절하고 말더군요. 그런데 http://hof.pe.kr/1082#comments 여기보면 올리버네님도 ivyro.net 인데 지원한다고 하시고.. 아무튼 cafe24.com은 확실히 지원합니다. http://hyuksang.com 혁상님도 카페24에서 워드프레스로 호스팅받고 계시지요.

  5. John Doe

    휴.. 저도 여기저기 호스팅 찔러 놓은 데가 있어서 또 하나 추가해야 되나.. 고민되네요. 조금 생각해 봐야겠습니다. 고맙습니다.

  6. mylook

    위에 적인 코드(php) 를 그대로 드래그해서 붙였을땐 안되었는데요 ” 이게 포스트 안에서는 다른 2바이트 문자로 바뀌어서 그런거였어요 그겄도 모르고 안되서 한참을 한강에서 수영하다 가라앉기 전에 발견해서 저도 적용 했습니다 🙂

  7. hof Post author

    mylook// 으음.코드를 감싸고 있는 상자를 <code>로 바꿨습니다. 죄송죄송 🙂

  8. pdaclub

    http://www.wordpress.co.kr/wordpress/forum/viewtopic.php?t=27
    위 포럼에도 질문했는데요. 제가 있는 웹호스팅업체는 mod_rewrite 모듈을 설치해줬다는데, 전 변하지 않는 링크설정하면 404 file not found 에러나는데 혹 참고할 만한 내용이 없을까요?
    알려주신 antispam.txt 도 생성한 상태입니다.
    .htaccess, antispam.txt 두 파일 권한은 모두 666으로 줬구요.
    index.php/archives/140 이런식으로는 되더군요.

  9. hof Post author

    pdaclub// test.php등 임의의 파일안에 <? phpinfo(); ?>라고 써넣으시면 아파치 서버에 mod_rewrite가 올려져 있는지 확인할수 있습니다. 해보시구요. 워드프레스가 설치된 디렉토리안에 있는 .htaccess 파일이 666 (rw-rw-rw-) 권한이상인지 확인해보시고, 아니면 .htaccess 파일을 삭제하신 다음에 touch .htaccess 로 빈 새파일 만드시고 chmod 666 .htaccess로 퍼미션 조정하신다음 다시 한번 컨트롤판넬에서 자동으로 .htaccess 파일내용을 채우도록 해보세요. 만약 안되시면 다시 적어주세요.

  10. pdaclub

    Configure Command 항목에는 mod_rewrite 라는 문구는 없고,
    Virtual Directory Support 는 disabled 로 되어 있네요. 설치가 안된건가요?
    웹호스팅업체에서 설치했다고 헀거느요.. 참..

  11. pdaclub

    http://www.pdaclub.org/blog/test.php
    제가 잘못봤나봐요. apache의 Loaded Modules에 보니 mod_rewrite 이 있습니다.
    쉘계정에서 .htaccess 을 만들어 666 권한을 줘도 마찬가지로 안되네요..
    http://codex.wordpress.org/Using_Permalinks
    의 맨 하단을 보니 서버에서 .htaccess을 무시할 경우가 있다던데요. 우선 웹호스팅업체로 문의한 상태인데,제가 미리 알수 있는 방법은 없을까요?
    다른 분 블로그에는 mod_rewrite 모듈만 설치하면 되는것 같은데,제가 잘 몰라서 그런지, 전 좀 어렵네요.

  12. pdaclub

    해결했어요.. 위 링크의 내용(아래 글)을 알려줬더니, 웹호스팅업체에서
    제 계정에 적용해줬는데, 지금은 잘됩니다.. 이렇게 쉬운걸 고민할걸 생각하면..
    암튼 고생하다 해결되니 wordpress툴에 더 정이 가겠는데요.
    “모든 설정이 맞는데도, 퍼마링크가 안되면 아파치 서버에서 .htaccess 을 무시하게 처리해서 그렇다고 하네요.
    예를 들면 아파치의 httpd.config 설정에서 AllowOverride directive 기능을 아래 예시같이 활성해줘야 된다고 합니다.
    Options FollowSymLinks
    AllowOverride All

  13. hof Post author

    pdaclub// 다행이네요. 그게 설정안되어있을줄은 생각도 못했어요. ;; 사용자더러 쓰라고 했으면 쓰게 해주고 쓰라고 했어야;;; 아무튼 다행입니다. 히히;;

  14. Pingback: Blooming Town » Permalinks 만들기

  15. Pingback: Blooming Town » Permalink 만들기

  16. qbio

    얼마 전부터 부쩍 늘어난 스팸리퍼러 때문에 고민을 했었는데,
    이 글을 읽고서 말끔하게 해결할 수 있었습니다 =)
    좋은 방법 알려주신 것 감사드립니다.

Comments are closed.