namazu-ml(ring)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

mknmz の関数 finddir



重野@IIJ-MC です。

mknmz の関数 finddir() は symlink を追いかけるようですが、
これだと下記のような構成で ABC/ の下に大量のファイルが存在する場合
どちらもインデックス化してしまいます。

   ~htdocs/
	ABC/
	DEF -> ABC

apache 等の FollowSymLinks 機能を考えてこのような仕様になっていると
思われますが、使用目的によっては追いかけて欲しくない場合がありますし、
インデックス化の時間も倍かかってしまいますので、
追いかけるか否かをオプションで切り替えられるようにしてはどうでしょうか。

以下、簡単に patch を作ってみました。(オプション -S で追いかけない)

--- /usr/local/bin/mknmz	Mon Jun 14 20:25:07 1999
+++ mknmz.nofollowsymlinks	Mon Jun 14 20:27:20 1999
@@ -375,2 +375,3 @@
 my $HtaccessExcludeOpt  = 0;
+my $NoFollowSymLinks = 0;
 
@@ -1429,2 +1430,3 @@
 	$HtaccessExcludeOpt = 1 if $ARGV[0] =~ /A/;
+	$NoFollowSymLinks = 1 if $ARGV[0] =~ /S/;
  	if ($ARGV[0] =~ /O$/) {
@@ -3084,2 +3086,5 @@
 		    if (-l $_) {
+			## Check $NoFollowSymLinks
+			next if $NoFollowSymLinks;
+
 			($dev,$ino,$mode,$nlink) = lstat($_);


後、$DENY_DIR という変数でインデックス化しないディレクトリ名を
正規表現で指定できると便利かなと思い、下記 patch を作りました。

	$DENY_DIR = '.*/OLD';

上記のように設定すれば OLD,Old,old 等のディレクトリ名以下をインデックス化
しません。これで robots.txt より細かい指定が可能になると思います。

--- /usr/local/bin/mknmz	Mon Jun 14 20:25:07 1999
+++ mknmz.deny_dir	Mon Jun 14 20:28:26 1999
@@ -206,2 +206,5 @@
 
+## Non-Target dirs' regex
+my $DENY_DIR = '';
+
 ## HTML extentions like .htm, .html, .shtml, .phtml, .html.en, .html.ja, .asp
@@ -3080,2 +3083,5 @@
 		if (-d _) { 
+		    ## Check $DENY_DIR
+		    next if ($DENY_DIR && $name =~ /^($DENY_DIR)$/i );
+
 		    # It really is a directory, so do it recursively.


ただし、こちらはあまりテストしていませんので、
何らかの弊害があるかもしれないです。

-- shigeno