Hatena::Groupsubtech

ういはるかぜの化学

Friday, July 16, 2010

Search Server 2010 でEUC-JPのページをクロールしたときにURLが残念になる 21:14  Search Server 2010 でEUC-JPのページをクロールしたときにURLが残念になる - ういはるかぜの化学 を含むブックマーク はてなブックマーク -  Search Server 2010 でEUC-JPのページをクロールしたときにURLが残念になる - ういはるかぜの化学

なんかSearch Serverはクロールした際にURLのクエリストリングをUTF-8としてデコードして格納してくださりやがるっぽく、EUC-JPURL(HikiとかHikiとか)をクロールすると検索結果画面で出てくるURLが悲惨な感じに化けてしまいます。

ということでしょうがないので踏み台CGI+WebPartsのXSL変更で何とかしました。おっと…ページ名とURLが違う場合が…

検索結果画面の「主要な検索結果」のXSLの320行目付近を変更。

          <xsl:attribute name="href">
            <xsl:choose>
              <xsl:when test="starts-with($url, 'http://hikifirm/') and contains(url, '?')">
                http://hikifirm/search_landing.cgi?wiki=<xsl:value-of select="substring-before(substring-after($url, 'http://hikifirm/'), '/')"/>&amp;page=<xsl:value-of select="ddwrt:UrlEncode(substring-after(title, 'Wiki - '))"/>
              </xsl:when>
              <xsl:otherwise>
                <xsl:value-of  select="$url"/>
              </xsl:otherwise>
            </xsl:choose>
          </xsl:attribute>

search_landing.cgiとかいう名前で適当に設置。

#!/usr/bin/ruby

require 'cgi'
require 'nkf'

cgi = CGI.new

page_euc = NKF.nkf('-We', cgi['page'] || '')
wiki_name = cgi['wiki'] || ''

# sanitize
wiki_name.gsub!(/[^a-zA-Z0-9_.\-]/, '')

redirect_url = "http://hikifirm/#{CGI.escape(wiki_name)}/?#{CGI.escape(page_euc)}"

print cgi.header({
    'status'   => 'REDIRECT',
    'Location' => redirect_url
})
print redirect_url

根本的になおすのはめんどくさそう…。

トラックバック - http://subtech.g.hatena.ne.jp/mayuki/20100716