拡張子なしのCGI

はじめに

拡張子なしでCGIを呼び出し、PATH_INFOで情報をやり取りする方法です。

色々便利なことがあり、特に最近はSEOの為に利用することが多いようです。

ここでは、show.cgi?a=1&b=1show/a/1/b/1/のようにしてみましょう。

show.cgi

cgi.paramの情報を表示します。

#!/usr/bin/ruby -Ke

require "cgi"
require "htmltemplate"

cgi = CGI.new()
html = HTMLTemplate.open( "show.html" )

html.gsub!( "(\ttitle\t)", cgi.query_string.to_s )
html.block( "params" ) do |block|
    cgi.params.collect do |key,val|
        str = block.dup
        str.gsub!( "(\tkey\t)", CGI::escapeHTML( key ) )
        str.gsub!( "(\tval\t)", CGI::escapeHTML( val.inspect ) )
        str
    end
end

cgi.out do
    html.to_s
end
$ ln -s show.cgi show_cgi.txt

show

cgi.path_infoの情報を表示します。

#!/usr/bin/ruby -Ke

require "cgi"
require "htmltemplate"

cgi = CGI.new()
html = HTMLTemplate.open( "show.html" )

array = cgi.path_info.to_s.split( /\// )
array.shift
array.push nil if array.size % 2 != 0

params = {}
0.step( array.size-1, 2 ) do |i|
    params[array[i]] = [] if !params[array[i]]
    params[array[i]].push array[i+1]
end

html.gsub!( "(\ttitle\t)", cgi.path_info.to_s )
html.block( "params" ) do |block|
    params.collect do |key,val|
        str = block.dup
        str.gsub!( "(\tkey\t)", CGI::escapeHTML( key ) )
        str.gsub!( "(\tval\t)", CGI::escapeHTML( val.inspect ) )
    end
end

cgi.out do
    html.to_s
end
$ ln -s show show.txt

show.html

PATH_INFOを利用した場合相対パスはで戻れないので絶対パスで指定しています。

<?xml version="1.0" encoding="euc-jp"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xml:lang="ja" dir="ltr" xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>(    title    )</title>
    </head>
    <body>
        <h1>(    title    )</h1>
        <dl>
<!-- params_begin -->
            <dt>(    key    )</dt>
            <dd>(    val    )</dd>
<!-- params_end -->
        </dl>
        <p>
            <a href="https://linux-life.net/program/ruby/cgidoc/noextension/">拡張子なしのCGI</a>に戻る
        </p>
    </body>
</html>

.htaccess

<Files show>
    SetHandler cgi-script
</Files>
$ ln -s .htaccess htaccess.txt

スポンサード リンク

トラックバック

トラックバックURL
https://linux-life.net/tb/program/ruby/cgidoc/noextension/
Linux Life 〜 No linux, No life 〜
プログラミング > Ruby > CGI入門 > 拡張子なしのCGI