#!/usr/local/bin/ruby # 2004-06-29: merge from http://moonrock.jp/~don/ruby/noreferer/ # 2006-04-18: fixed Opera support require "cgi" $DEBUG_LOG = false #$DEBUG_LOG = "/tmp/noreferer.log" # 消したいReferer URLのパターン list = [ %r!^http://\w+/! ] cgi = CGI.new def accept(cgi,url) return false if url.nil? return false unless url=~/https?:\/\// if referer=cgi.referer && String===referer list.each {|r| if r.match(referer) return true end } return false end return true end url, = cgi['url'] if cgi.request_method=='POST' if accept(cgi,url) header = { 'type' => 'text/html; charset=us-ascii', } cgi.out(header) { "
" } else cgi.out('text/plain; charset=us-ascii') { "no redirect" } end else url = CGI::unescape(url || '') if $DEBUG_LOG open($DEBUG_LOG, 'a') do |f| f.puts(url) end end agent = cgi.user_agent if accept(cgi,url) case agent when /^amaya/,/^Links /,/Opera\// header = { 'status' => 'REDIRECT', 'type' => 'text/plain; charset=us-ascii', 'Location' => url } cgi.out(header) { url } when /^w3m\//,/^Lynx\/2\./,/PlayStation Portable/ header = { 'type' => 'text/html; charset=us-ascii', } cgi.out(header) { <<-EOS Redirct to '#{CGI::escapeHTML(url)}' EOS } when %r!AppleWebKit/[\d\.]+ \(KHTML, like Gecko! header = { 'type' => 'text/html; charset=us-ascii', 'Refresh' => "0; URL=#{url}" } cgi.out(header) { '' } else header = { 'type' => 'text/plain; charset=us-ascii', 'Refresh' => '0; URL="' + url + '"' } cgi.out(header) { '' } end else cgi.out('text/plain; charset=us-ascii') { "no redirect" } end end