• ベストアンサー

tinyurlみたくurlの最後の文字列で処理を振り分ける方法

こんばんは。 tinyurl.comのサービスみたくurlの最後の文字列を使って処理を振り分ける方法を教えていただけませんか? http://自分の借りてるサーバ.com/rspef この ^^^^^ 'rspef'をperlプログラムで環境変数?引数?で受け取ってごにょごにょしたいのです。 環境はレンタルサーバーで、apacheの.htaccessはいじれますが、自由度は低い、といったところです。 お願いします!

質問者が選んだベストアンサー

  • ベストアンサー
  • vsba23895
  • ベストアンサー率58% (18/31)
回答No.2

http://www.example.com/anything のanything 部分に何が来ても http://www.example.com/cgi-bin/do-some.cgi で引き受けて、do-some.cgi の中で anything 部分を読み出して処理を分けたい、という意味ですか ? それなら、cgi だけでやるのは厳しいかもしれません。 ですが、お使いのサーバが apache で mod_rewrite が使えるなら、次のようにすれば出来ます。 http://www.example.com/.htaccess に RewriteEngine  On RewriteRule   ^([^\/]+)\/?$    /cgi-bin/do-some.cgi?param=$1 [L] とすれば、do-some.cgi から、普通のcgi のパラメタのようにして受け取れます。 RewriteRule   ^([^\/]+)     /cgi-bin/do-some.cgi?param=$1 [L] としてしまうと、ありとあらゆるURLが全て cgi に渡ってしまうので、(それでいいならよいのですが)、御注意。

m_i_t_s_u_b_a
質問者

お礼

そのとおりです。 RewriteEngineは試して見ましたがうまく動いていません。 RedirectMatchというのを見つけて試していますが、いまいちです.. RedirectMatch ^/(.{8})$ http://example.com/index.cgi → ok RedirectMatch ^/(.{8})$ http://example.com/index.cgi?id=$1 → NG index.cgiの引数無し呼び出しへはリダイレクトできるのですが、引数ありのurlへ飛べません。。 引数付きのurlへmod_rewrite無しで飛ばす方法ありますか?

その他の回答 (3)

  • vsba23895
  • ベストアンサー率58% (18/31)
回答No.4

>RewriteEngineは試して見ましたがうまく動いていません。 >RedirectMatchというのを見つけて試していますが、いまいちです.. mod_redirect では cgi のパラメタはいじれなかったような気がします。 私の知っているレンタルサーバは、たまたま皆 mod_rewrite が使えましたが、使えないサーバだと難しそうですね…。 mod_so が生きているのであれば、単に /usr/local/apache/conf/httpd.conf に LoadModule rewrite_module modules/mod_rewrite が指定されていない、というだけかも知れません。(希望的観測)。mod_so もなければ、ちょっとお手上げかも。 mod_so の有無は、/usr/local/apache/bin/httpd -l で分ります。

m_i_t_s_u_b_a
質問者

お礼

mod_rewrite が使えるようで、 以下のように.htaccessに記述したら意図どおりの動きになりました! ありがとうございます! RewriteEngine on RewriteRule ^([0-9a-zA-Z]{8})$ index.cgi?id=$1

  • perl2006
  • ベストアンサー率66% (2/3)
回答No.3

単純に"com/"で切るのはダメですか? $url = "http://自分の借りてるサーバ.com/rspef"; ($A,$B) = split(/com\//, $url); これなら$Bに最後の文字列が入りますが・・・

  • vsba23895
  • ベストアンサー率58% (18/31)
回答No.1

perl で CGI を設置することになると思いますが、 その CGI が、その URL に設置されるのなら $ENV{SCRIPT_URL} で、 別の位置(たとえば /cgi-bin/) に設置されるなら $ENV{HTTP_REFEFER}で、 その URL が取得できると思います。

m_i_t_s_u_b_a
質問者

補足

御回答ありがとうございます。 ただ、その場合だと、 http://自分の借りてるサーバ.com/rspef この ^^^^^ ランダム文字列それぞれに相当する個数のcgiスクリプトが必要ですよね? cgiスクリプトはひとつで処理できる方法は無いでしょうか?

関連するQ&A

専門家に質問してみよう