워드프레스 태그목록 페이지링크 오류해결방법

몇달전 부터 내 블로그에서 태그를 눌러 나오는 페이지에서 페이지 번호나 다음페이지를 클릭하면 제대로 나오지 않았다. 게다가 어드인 화면에서도 draft 의 다음목록이 제대로 나오지 않았다.

예를 들어 research 란 태그를 클릭하면 나오는 페이지에서 아래의 페이지 번호를 누르면 다음 페이지가 나와야 하는데 Not Found 라고 나왔다.

자세히 보니

http://dobiho.com/?tag=research 라고 되어야 할 페이지 번호 링크가 http://dobiho.com/?tag=research%3Ftag%3Dresearch&paged=2 라고 표시되고 있었다.

찾아보니 %3F는 ? 이고 %3D는 = 인데 아무래도 인자를 주고 받을때 뭐가 문제가 있는 모양이다.

페이지 번호

내 블로그는 워드프세스를 사용하고 페이지번호 플러그인은  WP-PageNavi 을 사용한다.  시간 날때 마다 플러그인과 워드프레스 어드민 소스를 들여다봤는데 오늘 점심식사를 빨리 먹고와서 해결 했다.

문제는 간단했다. 내 호스팅사의 서버가 Microsoft IIS 였고 wp-settings.php 소스코드에 문제가 있었다.

wordpress track 을 보니 get_pagenum_link broken for IIS resurfaces 등의 문제가 지적이 되어 3년 전부터 소스코드가 반영이 되어 있었는데 최근 글도 이문제가 발생한다고 되어있었다.

워드프레스 어드민소스에 print_r($_SERVER); 를 추가해보니 [SERVER_SOFTWARE] => Microsoft-IIS/5.0 라고 보였다.

내 블로그 호스트팅사가 원래 IIS였는지는 모르겠지만 암튼 IIS를 고치기 위해서 워드프레스팀이 wp-settings.php 에 수정을 한 것이 내 호스팅사와 맞지가 않았던 모양이다.

wordpress 2.9.x 에서

/wp-settings.php 을 열어 아래를 찾아 맨 아래 빨간색 소스코드를 주석으로 막으니 되었다.

wordpress 3.x 에서는 소스코드 위치가 바뀌었다. /wp-includes/load.php 에 있다.

// Fix for IIS when running with PHP ISAPI
if ( empty( $_SERVER[‘REQUEST_URI’] ) || ( php_sapi_name() != ‘cgi-fcgi’ && preg_match( ‘/^Microsoft-IIS\//’, $_SERVER[‘SERVER_SOFTWARE’] ) ) ) {

// IIS Mod-Rewrite
if (isset($_SERVER[‘HTTP_X_ORIGINAL_URL’])) {
$_SERVER[‘REQUEST_URI’] = $_SERVER[‘HTTP_X_ORIGINAL_URL’];
}
// IIS Isapi_Rewrite
else if (isset($_SERVER[‘HTTP_X_REWRITE_URL’])) {
$_SERVER[‘REQUEST_URI’] = $_SERVER[‘HTTP_X_REWRITE_URL’];
}
else
{
// Use ORIG_PATH_INFO if there is no PATH_INFO
if ( !isset($_SERVER[‘PATH_INFO’]) && isset($_SERVER[‘ORIG_PATH_INFO’]) )
$_SERVER[‘PATH_INFO’] = $_SERVER[‘ORIG_PATH_INFO’];

// Some IIS + PHP configurations puts the script-name in the path-info (No need to append it twice)
if ( isset($_SERVER[‘PATH_INFO’]) ) {
if ( $_SERVER[‘PATH_INFO’] == $_SERVER[‘SCRIPT_NAME’] )
$_SERVER[‘REQUEST_URI’] = $_SERVER[‘PATH_INFO’];
else
$_SERVER[‘REQUEST_URI’] = $_SERVER[‘SCRIPT_NAME’] . $_SERVER[‘PATH_INFO’];
}

// Append the query string if it exists and isn’t null
//    if (isset($_SERVER[‘QUERY_STRING’]) && !empty($_SERVER[‘QUERY_STRING’])) {
//        $_SERVER[‘REQUEST_URI’] .= ‘?’ . $_SERVER[‘QUERY_STRING’];
//    }

}
}

wordpress trac 에서 나와 같은 문제 해결을 찾지는 못했는데 아마도 내 경우 미봉책일 수도 있을것 같다.  원리를 이해하지 않고 그냥 눈짐작으로 찾아서 막았을 뿐이니 말이다. 워드프레스 업그레이드할때 마다 워드프레스 2.7 관리자 화면에서 조회수 확인하기 위해 수정한 어드민 소스외에 수정할게 하나 더 늘었다.

어쨌건 내블로그는 글의 구별을 카테고리를 사용하지 않고 태그를 사용하므로 태그 목록 네비게이션이 중요한데 이제야 문제를 해결한것 같다. hci 에 대한 태그를 클릭해서 나온 페이지 아래의 페이지 번호나 다음페이지를 클릭하니 잘 동작한다.

 

* wordpress 3.8 에서도 이 문제가 발생하는데, 같은 방법으로 해결된다.

 

Related Post




  • 좋은 정분에 감사합니다
    그 동안 이것 때문에 고생했는데 덕분에 한 번에 너무 잘 해결했네요 ^_^

  • 좋은 정분에 감사합니다
    그 동안 이것 때문에 고생했는데 덕분에 한 번에 너무 잘 해결했네요 ^_^




Scroll Up