작가: 트로터
이메일: [email protected]
출처 : www.gbunix.com
문서를 완전하게 유지하시고 재인쇄 시 출처를 표시해 주시기 바랍니다.
머리말
인터넷의 콘텐츠가 놀라운 속도로 증가함에 따라 웹 사이트가 사용자 친화적(사용자 친화적)일 뿐만 아니라 검색 엔진에 의해 더 잘 색인되기를 원하는 경우 검색 엔진의 중요성이 점점 더 부각되고 있습니다. 웹사이트 디자인은 검색 엔진 친화적이어야 합니다. (Search Engine Friendly)의 디자인도 매우 중요합니다. 검색 엔진에 들어가는 페이지 콘텐츠가 많을수록 사용자가 다른 키워드를 사용하여 검색할 가능성이 커집니다. 동적 웹 링크를 정적 링크로 다시 작성하는 것이 검색 엔진을 최적화하는 가장 안전하고 안정적인 방법이라는 점을 인정해야 합니다. 이 솔루션은 phpBB 포럼 시스템의 URL 리디렉션을 위해 제안되었습니다.
솔루션
URL 리디렉션은 기술적으로 두 가지 방법으로 구현할 수 있습니다. 하나는 URL 재작성을 기반으로 하고 다른 하나는 PATH_INFO를 기반으로 합니다. 예를 들어 http://www.gbunix.com/bbs/ftopic102.html은 rewrite 기반으로 구현되고, http://www.gbunix.com/article/article.php/515 는 PATH_INFO 기반으로 구현됩니다.
PHPBB 포럼의 변화를 위해 이 두 가지 기술을 각각 소개하겠습니다.
1. 재작성 기술을 사용한 구현:
phpBB 코드 수정:
/includes/page_header.php 파일을 열고
코드 검색:
//
//로그인/로그아웃 상태 생성
//
이전에 추가:
ob_start();
함수 replacement_for_mod_rewrite(&$s)
{
$urlin =
정렬(
"'(?<!/)viewforum.php?f=([0-9]*)&topicdays=([0-9]*)&start=([0-9]*)'",
"'(?<!/)viewforum.php?f=([0-9]*)&mark=topics'",
"'(?<!/)viewforum.php?f=([0-9]*)'",
"'(?<!/)viewtopic.php?t=([0-9]*)&view=이전'",
"'(?<!/)viewtopic.php?t=([0-9]*)&view=next'",
"'(?<!/)viewtopic.php?t=([0-9]*)&postdays=([0-9]*)&postorder=([a-zA-Z]*)& ;시작=([0-9]*)'",
"'(?<!/)viewtopic.php?t=([0-9]*)&start=([0-9]*)&postdays=([0-9]*)&postorder =([a-zA-Z]*)&강조 표시=([a-zA-Z0-9]*)'",
"'(?<!/)viewtopic.php?t=([0-9]*)start=([0-9]*)'",
"'(?<!/)viewtopic.php?t=([0-9]*)'",
"'(?<!/)viewtopic.php&p=([0-9]*)'",
"'(?<!/)viewtopic.php?p=([0-9]*)'",
);
$urlout = 배열(
"뷰포럼\1-\2-\3.html",
"포럼\1.html",
"포럼\1.html",
"ptopic\1.html",
"ntopic\1.html",
"ftopic\1-\2-\3-\4.html",
"ftopic\1.html",
"ftopic\1-\2.html",
"ftopic\1.html",
"경\1.html",
"경\1.html",
);
$s = preg_replace($urlin, $urlout, $s);
$s를 반환합니다.
}
/includes/page_tail.php 파일을 열고
$db->sql_close()
코드를 검색한
후
$contents = ob_get_contents();
를 추가합니다.
ob_end_clean();
echo replacement_for_mod_rewrite($contents);
global $dbg_starttime;
phpBB 버전이 2.06인 경우, include/functions.php 파일을 열고
코드를 검색하십시오:
if (!empty($db))
{
$db->sql_close();
}
:
if (stristr($url, 'http://')) {
header('위치: ' . $url);
출구;
}
마지막으로 bbs 디렉터리에 .htaccess 파일을 만듭니다. 파일 내용은 다음과 같습니다.
RewriteEngine On.
RewriteRule ^forums.* index.php
RewriteRule ^forum([0-9]*).* viewforum.php?f=$1&mark=topic
RewriteRule ^viewforum([0-9]*)-([0-9]*)-([0-9]*).* viewforum.php?f=$1&topicdays=$2&start=$3
RewriteRule ^forum([0-9]*).* viewforum.php?f=$1
RewriteRule ^ptopic([0-9]*).* viewtopic.php?t=$1&view=previous
RewriteRule ^ntopic([0-9]*).* viewtopic.php?t=$1&view=next
RewriteRule ^ftopic([0-9]*)-([0-9]*)-([a-zA-Z]*)-([0-9]*).* viewtopic.php?t=$1&postdays =$2&후주문=$3&시작=$4
RewriteRule ^ftopic([0-9]*)-([0-9]*).* viewtopic.php?t=$1&start=$2
RewriteRule ^ftopic([0-9]*).* viewtopic.php?t=$1
RewriteRule ^ftopic([0-9]*).html viewtopic.php?t=$1&start=$2&postdays=$3&postorder=$4&highlight=$5
RewriteRule ^sutra([0-9]*).* viewtopic.php?p=$1
서버가 .htaccess를 지원하지 않는 경우 httpd.conf 파일을 열고 다음과 같이 가상 호스트 부분을 편집하십시오.
<VirtualHost 1.2.3.4 >
ServerAdmin [email protected]
DocumentRoot /home1/ftp/trotter/www
서버 이름 www.gbunix.com
RewriteEngineOn
RewriteRule ^/bbs/forums.* /bbs/index.php
RewriteRule ^/bbs/forum([0-9]*).* /bbs/viewforum.php?f=$1&mark=topic
RewriteRule ^/bbs/viewforum([0-9]*)-([0-9]*)-([0-9]*).* /bbs/viewforum.php?f=$1&topicdays=$2&start=$3
RewriteRule ^/bbs/forum([0-9]*).* /bbs/viewforum.php?f=$1
RewriteRule ^/bbs/ptopic([0-9]*).* /bbs/viewtopic.php?t=$1&view=previous
RewriteRule ^/bbs/ntopic([0-9]*).* /bbs/viewtopic.php?t=$1&view=next
RewriteRule ^/bbs/ftopic([0-9]*)-([0-9]*)-([a-zA-Z]*)-([0-9]*).* /bbs/viewtopic. php?t=$1&postdays=$2&postorder=$3&start=$4
RewriteRule ^/bbs/ftopic([0-9]*)-([0-9]*).* /bbs/viewtopic.php?t=$1&start=$2
RewriteRule ^/bbs/ftopic([0-9]*).* /bbs/viewtopic.php?t=$1
RewriteRule ^/bbs/ftopic([0-9]*).html /bbs/viewtopic.php?t=$1&start=$2&postdays=$3&postorder=$4&highlight=$5
RewriteRule ^/bbs/sutra([0-9]*).* /bbs/viewtopic.php?p=$1
오류 로그 로그/gbunix.com-error_log
CustomLog 로그/gbunix.com-access_log 결합
</VirtualHost>
가상 호스트를 사용하지 않는 경우 코드의 RewriteRule 부분을 httpd.conf 파일 끝에 넣습니다.
참고: 시스템 보안을 위해 bbs 릴리스 디렉터리에 robots.txt 파일을 생성하는 것이 매우 중요합니다. 파일 내용은 다음과 같습니다.
허용하지 않음: /your-forum-folder/sutra*.html$
허용하지 않음: /your-forum-folder/ptopic*.html$
허용하지 않음: /your-forum-folder/ntopic*.html$
허용하지 않음: /your-forum-folder/ftopic*asc*.html$
Apache용 mod_rewrite 모듈을 설치하십시오.
서버 아파치가 설치되지 않은 경우 Apache를 컴파일할 때 mod_rewrite 모듈을 컴파일하기만 하면 됩니다. www.gbunix.com 의 Found에서 찾을 수 있습니다. Apache가 설치되었고 이제 mod_rewrite.so 모듈을 컴파일하여 Apache에 로드하려는 경우 아래에서 이 방법을 소개합니다.
Solaris 운영 체제를 예로 들어 보겠습니다.
# PATH=/usr/local/bin:/usr/sfw/bin:/usr/ccs/bin:$PATH
# 경로 내보내기
# 어느 gcc
# which make
# find ./ -name mod_rewrite.c //아파치 설치 디렉터리에서 mod_rewrite.c 파일을 찾습니다.
# cd PATH/to/mod_rewrite.c //mod_rewrite.c 파일이 포함된 디렉터리를 입력하세요.
# apxs -c mod_foo.c //현재 Apache를 사용하고 있는 bin 디렉토리에 apxs의 절대 경로를 지정하십시오.
# apxs -i -a -n mod_rewrite mod_rewrite.la
오류가 없으면 mod_rewrite.so 파일을 Apache의 모듈 디렉터리에 컴파일해야 합니다.
httpd.conf 파일을 편집하고 다음과 같이 httpd.conf에 mod_rewrite.so의 로딩 문이 이미 포함되어 있는지 확인합니다.
LoadModule rewrite_module 모듈/mod_rewrite.so
이때 아파치는 이미 다시 쓰기를 지원해야 합니다.
2. PATH_INFO 기술을 기반으로 한 구현:
phpBB 코드 수정:
overall_header.tpl 파일을 열고 첫 번째 줄에 다음 코드를 추가합니다:
<base href=" http://www.your-forum.com/forum-dir/ ">
config.php 파일을 열고 ?> 앞에 다음 코드를 추가합니다.
if ($REQUEST_METHOD == "GET") {
if (strlen(getenv('PATH_INFO')) > 1) {
$GET_array = 배열();
$PHP_SELF = str_replace(getenv('PATH_INFO'), '', $PHP_SELF);
$vars =explod('/', substr(getenv('PATH_INFO'), 1));
for ($i=0, $n=sizeof($vars); $i<$n; $i++) {
if (strpos($vars[$i], '[]')) {
$GET_array[substr($vars[$i], 0, -2)][] = $vars[$i+1];
} 또 다른 {
$HTTP_GET_VARS[$vars[$i]] = $vars[$i+1];
}
$i++;
}
if (sizeof($GET_array) > 0) {
while (list($key, $value) = 각각($GET_array)) {
$HTTP_GET_VARS[$key] = $값;
}
}
}
}
if ($REQUEST_METHOD == "POST") {
if (strlen(getenv('PATH_INFO')) > 1) {
$POST_array = 배열();
$PHP_SELF = str_replace(getenv('PATH_INFO'), '', $PHP_SELF);
$vars =explod('/', substr(getenv('PATH_INFO'), 1));
for ($i=0, $n=sizeof($vars); $i<$n; $i++) {
if (strpos($vars[$i], '[]')) {
$POST_array[substr($vars[$i], 0, -2)][] = $vars[$i+1];
} 또 다른 {
$HTTP_POST_VARS[$vars[$i]] = $vars[$i+1];
}
$i++;
}
if (sizeof($GET_array) > 0) {
while (list($key, $value) = 각각($POST_array)) {
$HTTP_POST_VARS[$key] = $값;
}
}
}
}
function.php 파일을 열고 ?> 앞에 다음 코드를 추가하세요.
function replacement_for_mod_rewrite($s) {
$s = str_replace("?", "/", $s);
$s = str_replace("&", "/", $s);
$s = str_replace("&", "/", $s);
$s = str_replace("=", "/", $s);
return $s
}
session.php 파일을 열고 원래 정의된append_sid() 함수를 다음 코드로 바꿉니다:
functionappend_sid($url, $non_html_amp = false)
{
글로벌 $SID;
if ( !empty($SID) && !preg_match('#sid=#', $url) && !preg_match('#sid/#', $url) && !stristr( $_SERVER["HTTP_USER_AGENT"] ,'bot ') && !stristr($_SERVER["HTTP_USER_AGENT"] ,'inktomi'))
{
$url .= ( ( strpos($url, '?') != false ) ? ( ( $non_html_amp ) ? '&' : '&' ) : $SID ;
}
$url=replace_for_mod_rewrite($url);
$url을 반환합니다.
}
이때 귀하의 포럼 URL은 ( http://www.domain/bbs/viewtopic.php/t/4 )로 매핑됩니다.
참고 자료: