2016-08-29 5 views
1

私のgitwebインストールはこれまで通り動作しますが、クエリ文字列を含む生成されたすべてのリンクが動作します。Gitweb URLがクエリ文字列でエスケープする

host/gitweb?p=somepath&a=summary 

が何らかの形で誤っています。 最初に、アンパサンドはセミコロンに置き換えられます。 htmlを調べると、リンクは次のようになります

host/gitweb?p=somepath;a=summary 

リンクをクリックすると、ブラウザは ';'をエスケープします。 「%部3b」に、そのサーバーに送信されたURLはgitweb.cgiがこれを解析しない

host/gitweb?p=somepath%3ba=summary 

のように見え、404エラーページが表示されます。 '%3b'を ';'で置き換えると、または '&'、すべて正常に動作します。

これはどのようにサーバー側で修正できますか?

これまでのところ、私は ';'を生成する行を見つけようとしました。 URLには、行1457

$href .= "?" . join(';', @result) if scalar @result; 

の代わりに ';' '&'によってブラウザに不正な形式のxhtmlが表示されます。それを '& amp;'に置き換えてください。ブラウザは再び ';'をエスケープします。再び破損したURLを生成します。

、私はgitweb.confファイルにオプション

$feature{'pathinfo'}{'default'} = [1]; 

を設定した場合の問題は、(私はリポジトリを閲覧することができます)一種の隠されているが、残念ながら、複数のリポジトリを含むフォルダを表示することができませんそれぞれのリンクがいくつかのクエリパラメータを使用するからです。

+0

Re "*ブラウザが ';'をエスケープします。 〜 '%3b' * "、いいえ。それは合法ではないでしょう。 – ikegami

+0

"*を ';'に置き換える'&'はブラウザに不正な形式のxhtmlを与えます。* "、あなたはXHTML注入エラーがあります。XHTMLに埋め込んだテキスト(URL)をエスケープするのを忘れた。 '& 'を' & ' – ikegami

+0

に置き換える必要があります。 '&'によっても動作しません。なぜなら、 ';'リンクをクリックするとエスケープされています。 – quantenquatsch

答えて

0

クエリ文字列をエンコードまたはデコードしません。 のparamの名前と値は、符号化と個別に復号化され、クエリ文字列すなわちの区切り文字は...

= ; & 

URLエンコードやデコード取得することはありませんする必要があります。

サーバ環境変数$ENV{REQUEST_URI}を確認して、あなたが言ったようにエンコードされた情報をサーバが受信したかどうかを確認できます。ブラウザがそれを送信している場合、それは問題であり、それを修正するためにPerlコードで行うことはできません。なぜなら、それはあなたのPerlコードの中でもっと多くの問題を引き起こすからです。

+0

私はgitweb.confに 'die $ ENV {' REQUEST_URI '}'というコマンドを追加しました。エラー:[pid 32381] [クライアント141.30.155.71:54651] AH01215:[Tue Aug 30 18:37:08 2016] gitweb.cgi:致命的:[Tue Aug 30 18:37:08 2016] gitweb.cgi:FATAL: /gitweb/gitweb.cgi?a=project_list%3bpf=projects/foo/home/git/gitweb.conf 61行目。 - ブラウザが要求をロケーションバーに印刷されたものとして送信するようです。 '%3b'を ';'に置き換えるために、Apache経由でリクエストを書き換えることができるかもしれません。 ... – quantenquatsch

0

私は何とかのapacheに書き換えルールを使用して問題を解決:

RewriteEngine on 
RewriteCond %{QUERY_STRING} ^a=project_list%3bpf=(.*)$ 
RewriteRule (.*) $1?a=project_list;pf=%1 [QSA] 

それが唯一の有効なパス情報機能で指定したパスにプロジェクトリストのために動作します。総合的なアプローチは、可能なすべてのクエリパラメータを検索し、それらをすべて置き換えることです。

しかし、この解決策は、gitwebの奇妙なURLエスケープの実際の問題を解決しないため、満足できません。

+0

これは価値がありますが、私は同じ問題を抱えており、Apacheの設定で既存のRewriteRuleディレクティブにNEフラグを追加することで修正しました。 http://stackoverflow.com/questions/18323782/semi-colons-in-url-changes-to-3b-via-htaccessも参照してください。 – ctrueden

関連する問題