ウェブサーバ - サイト内全文検索 - Site Search - 設置・カスタマイズ

クラウディア 
1. 基本的な設置
2. apache の設定
3. CGI のカスタマイズ
4. CSS の取り込み
5. index.html の設定
6. 運用
7. 末路

1. 基本的な設置

 一式を置く場所としてウェブサーバにひとつディレクトリを作っておいた方がいいかと思います。  わたしは CGI を直接たたくのでなく、html 越しにたたこうと思ったので以下のような構成にしました。
 オリジナル   設置先   パーミッション 備考
ajax.search.html index.html 644 -rw-r--r--
index.cgi index.cgi 755 -rwxr-xr-x
init.cgi init.cgi 644 -rw-r--r--
search.cache.cgi search.cache.cgi 777 -rwxrwxrwx
search.log.match.cgi search.log.match.cgi 777 -rwxrwxrwx
search.log.not.match.cgi search.log.not.match.cgi 777 -rwxrwxrwx
sitesearch.js sitesearch.js 644 -rw-r--r--

2. apache の設定

 ここでは apache24 を前提に設定しています。  apache の設定ファイルのうち
/usr/locac/etc/apache24/Include/ファイル名.conf
 で前項のファイル設置場所のディレクトリ定義を行っておきます。

<Directory "/ファイル設置場所のパス">
        Options -Indexes +Followsymlinks +Includes +ExecCGI
        Allowoverride   All
        Require all granted
</Directory>
 2行目の +ExecCGI が必須になります。  3~4行目はサイトの設定に合わせます。  設定が終わったら、ファイルの確認とウェブサーバの再起動を忘れないように。

service apache24 configtest
service apache24 graceful

3. CGI のカスタマイズ

index.cgi
 をカスタマイズします。  変更するのは前半のわずかな部分のみ

#!/usr/bin/perl

## 京
use Encode;
require './init.cgi';
&_GET;

my(@keys) = split(/ /,$_GET{'q'});

## int
$totime = time();

if((-f $config{'cache'}) && (((stat($config{'cache'}))[9] + 60 * $config{'expiration'})  > $totime)){
	## Load Cache
	@pages = &_LOAD($config{'cache'});
}
else{
	## Create Cache
	push @dirs,$config{'dir'};
	while($cnt < @dirs){
		$dir = $dirs[$cnt];
		opendir DH, $dir or die "$dir:$!";
		while (my $file = readdir DH) {
			next if $file =~ /^\.{1,2}$/;
			$currentpath = $dir . $file;
			if(-d $currentpath && (grep(/^${file}$/,@excluded_dirs_name)) == 0){
				push @dirs, "${currentpath}/";
			}
			elsif((split(/\./,$currentpath))[-1] =~ /htm/si){
				$html = join("",&_LOAD($currentpath));
				$html =~ s/\t//ig;
				$html =~ s/\r//ig;
				$html =~ s/\n//ig;
				my ($tilte,$snippet,$keywords,$contents,$thumbnail);
				if($html =~ /<title>(.*?)<\/title>/si){
					$title = $1;
					if($title =~ /$config{'title_regex'}/){
						$title = $1;
					}
				}
				if($html =~ /<meta.*?name=\"Description\".*?content=\"(.*?)\"/si){
					$snippet = $1;
				}
 まず先頭行は FreeBSD では

#!/usr/local/bin/perl
 と書き直します。  それとこれはわたしだけの事情ですが、本サイトではタイトルを html ファイルの <title> タグからとってこれないので、代わりに <h1>、<h2>、<h3> からとってくるようにします。  35~40行を以下のように書き換えています。

				$title = '';

				if($html =~ /<title>(.*?)<\/title>/si){
					$title = $1;
					if($title =~ /$config{'title_regex'}/){
						$title = $1;
					}
				}

				if ($title eq '')
				{
					if($html =~ /<h1>(.*?)<\/h1>/si){
						$title = $1;
						if($title =~ /$config{'title_regex'}/){
							$title = $1;
						}
					}
				}

				if ($title eq '')
				{
					if($html =~ /<h2>(.*?)<\/h2>/si){
						$title = $1;
						if($title =~ /$config{'title_regex'}/){
							$title = $1;
						}
					}
				}

				if ($title eq '')
				{
					if($html =~ /<h3>(.*?)<\/h3>/si){
						$title = $1;
						if($title =~ /$config{'title_regex'}/){
							$title = $1;
						}
					}
				}
 次に
init.cgi
 をカスタマイズします。  これは詳細に関しては、マニュアルに詳しく書かれていますので省略します。

4. CSS の取り込み

 CSS ファイルは
sitesearch.css
 というものが用意されていますが、ファイルを多くしたくないので、もともと設置してある SCSS ファイルの中にすべて取り込みました。

5. index.html の設定

 用意されている
ajax.search.html
 を
index.html
 にファイル名変更してオリジナルの

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<meta http-equiv="Content-Script-Type" content="text/javascript" />
		<meta http-equiv="Content-Style-Type" content="text/css" />
		<title>サイト内検索Ajaxモードサンプル</title>
		<link rel="stylesheet" href="sitesearch.css" type="text/css" />
		<script type="text/javascript" src="sitesearch.js"></script>
	</head>
	<body>
		<form class="sitesearch" method="get" action="index.cgi" onsubmit="return sitesearch(this);">
			<input type="text" name="q" value="" /> <input type="submit" value="サイト内検索" />
		</form>
		<!--検索結果が出力されるオブジェクトのIDはsearch_resultで固定-->
		<div id="search_result">

		</div>
	</body>
</html>
 の特にヘッダ部分を書き換えました。

6. 運用

 でまぁ、設置したのが「検索」のページです。  出来栄えは、どうぞ、ご確認ください。

7. 末路

 最近(2020年4月8日)、サイトの構成を変えたら、どうも検索が機能しなくなっちゃったようです。  あわてて、新しい検索機能を模索中です。
ハイスピードプラン高速大容量レンタルサーバ10G