- ベストアンサー
tinyurlみたくurlの最後の文字列で処理を振り分ける方法
こんばんは。 tinyurl.comのサービスみたくurlの最後の文字列を使って処理を振り分ける方法を教えていただけませんか? http://自分の借りてるサーバ.com/rspef この ^^^^^ 'rspef'をperlプログラムで環境変数?引数?で受け取ってごにょごにょしたいのです。 環境はレンタルサーバーで、apacheの.htaccessはいじれますが、自由度は低い、といったところです。 お願いします!
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
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 に渡ってしまうので、(それでいいならよいのですが)、御注意。
その他の回答 (3)
- vsba23895
- ベストアンサー率58% (18/31)
>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 で分ります。
お礼
mod_rewrite が使えるようで、 以下のように.htaccessに記述したら意図どおりの動きになりました! ありがとうございます! RewriteEngine on RewriteRule ^([0-9a-zA-Z]{8})$ index.cgi?id=$1
- perl2006
- ベストアンサー率66% (2/3)
単純に"com/"で切るのはダメですか? $url = "http://自分の借りてるサーバ.com/rspef"; ($A,$B) = split(/com\//, $url); これなら$Bに最後の文字列が入りますが・・・
- vsba23895
- ベストアンサー率58% (18/31)
perl で CGI を設置することになると思いますが、 その CGI が、その URL に設置されるのなら $ENV{SCRIPT_URL} で、 別の位置(たとえば /cgi-bin/) に設置されるなら $ENV{HTTP_REFEFER}で、 その URL が取得できると思います。
補足
御回答ありがとうございます。 ただ、その場合だと、 http://自分の借りてるサーバ.com/rspef この ^^^^^ ランダム文字列それぞれに相当する個数のcgiスクリプトが必要ですよね? cgiスクリプトはひとつで処理できる方法は無いでしょうか?
お礼
そのとおりです。 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無しで飛ばす方法ありますか?