Perlで構築されているファイル設置型のソフトウェア(メルマガ関連)を共用レンタルサーバー(さくら)に設置いたしました。
基本的な動作は問題なく動いているのですが、静的URL関連でパラメータの受け渡しが出来ておらず、
ご指導頂けますと幸いでございます。
【行なっていること】
・ルートディレクトリ以下にhogeディレクトリを作成
・hoge以下に各種処理プログラム及び.htaccessを設置
・.htaccessで特定の静的URLを設定(IfModule内)
【hoge直下設置の.htaccessの内容】
#Options -Indexes +ExecCGI AddType application/x-httpd-cgi .cgi AddType "text/html: charset=UTF-8" * DirectoryIndex index.cgi <Files ~ ".(pl|pm|tpl|sh)?$"> deny from all </Files> <Files ~ "^.(htaccess|htpasswd)$"> deny from all </Files> <Files ~ "~$"> deny from all </Files> <Files ~ "^_.+$"> SetHandler cgi-script </Files> <IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^rm/([^/]*)/([^/]*)/([^/]*)/?$ rm.cgi?m=$1&u=$2&h=$3 RewriteRule ^rm/([^/]*)/([^/]*)/?$ rm.cgi?m=$1&u=$2 RewriteRule ^cs/([^/]*)/([^/]*)/([^/]*)/?$ cs.cgi?m=$1&c=$2&u=$3 RewriteRule ^cs/([^/]*)/([^/]*)/?$ cs.cgi?m=$1&c=$2 RewriteRule ^lmtd/([^/]*)/([^/]*)/([^/]*)/([^/]*)/?$ lmtd.cgi?m=$1&no=$2&h=$3&u=$4 </IfModule>
【事象】
・https://domain/hoge/cs/{$1}/{$2}/{$3}の静的URLにアクセスした際、該当のファイルの読み込み(cs.cgi)は出来ておりますが、パラメータ(m,c,u)の取得が出来ていない状況でございます(「パラメータ情報に不備があります」というエラーが表示される)。
動的URLでアクセス(cs.cgi?m=$1&c=$2&u=$3)した際は正常にパラメータを取得できております。
念の為cs.cgiの抜粋内容を記載いたします。
#!/usr/bin/perl package main; use strict; use CGI; use CGI::Carp qw(fatalsToBrowser); use DBI; require "./config.cgi"; require "./lib/db.pl"; require "./lib/get.pl"; require "./lib/show.pl"; require "./lib/proc.pl"; require "./lib/item.pl"; require "./lib/default.pl"; $| = 1; my $F = CGI->new(); &db::open(); my $id = $F->param('m'); my $cs_no = $F->param('c'); my $user_no = $F->param('u'); my $redirect; my $errmsg = &item::errmsg_item({id => $id,action => 'cs'}); # <- kida 2.07 //以下の条件にヒットして処理が終了する if(!$id || !$cs_no ){ &show::err_msg(" <p>パラメータ情報に不備があります。</p> <p>WEB管理者までお問い合わせください。</p> "); } ``` 【試したこと】 もしかするとIfModuleを通過していないかもしれないと考え、いくつか試した内容が以下になります。 ・<IfModule>を削除して静的URLでアクセス->cs.cgiの処理を実行(パラメータは欠損) →SetHandler cgi-scriptによりcs.cgiが実行された? ・RewriteRule ^cs/([^/]*)/([^/]*)/([^/]*)/?$ cs.cgi?m=$1&c=$2&u=$3 を RewriteRule ^cs2/([^/]*)/([^/]*)/([^/]*)/?$ cs.cgi?m=$1&c=$2&u=$3 に変更して(cs->cs2) https://domain/hoge/cs2/{$1}/{$2}/{$3}の静的URLにアクセス →cs.cgiが実行され、パラメータ(m,c,u)も受け渡しされた 【ご指導頂きたいこと】 事象について、.htaccessの記述等が整合していない箇所があるかと考えておりますが、 要修正箇所が特定出来ていない状況である為、不勉強で大変恐れ入りますが、原因箇所をご教授頂けますと幸いです。 【備考】 ・Perlは5.8を使用しております。 ・mod_rewriteは使用できることを確認いたしました。 記載する情報に不足がある場合は別途追記させて頂きます。 お力添え頂けますと幸いです、宜しくお願いいたします。
> もしかするとIfModuleを通過していないかもしれないと考え、
こういう心配をすることになるので、そもそもIfModuleなど書かない方が良いです。
> ・<IfModule>を削除して静的URLでアクセス->cs.cgiの処理を実行(パラメータは欠損)
→SetHandler cgi-scriptによりcs.cgiが実行された?
ここをもう少し詳しく、事実だけ書いてください。どういうURLに対してどういう事象になったか。
恐れ入ります、事実ではなく認識が入ってしまっておりましたので、
追記致します。
・<ifModule>を削除した後に、https://domain/hoge/cs/{$1}/{$2}/{$3}形式のURLにアクセス
致しました。(例:https://domain/hoge/cs/test12/1/2)
・その結果、cs.cgiの下記の箇所で処理が終了して「パラメータ情報に不備があります~」のエラーメッセージが画面に表示されて処理は終了致しました。
//以下の条件にヒットして処理が終了する
if(!$id || !$cs_no ){
&show::err_msg("
<p>パラメータ情報に不備があります。</p>
<p>WEB管理者までお問い合わせください。</p>
");
}
//以下の条件にヒットして処理が終了する
if(!$id || !$cs_no ){
&show::err_msg("
<p>パラメータ情報に不備があります。</p>
<p>WEB管理者までお問い合わせください。</p>
");
}
環境変数 QUERY_STRING を表示してみましょう。
回答1件
あなたの回答
tips
プレビュー