- 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日)、サイトの構成を変えたら、どうも検索が機能しなくなっちゃったようです。
あわてて、新しい検索機能を模索中です。
|