29

. これは、URLが次のよう になっていることを意味http://myapp/index/. します。次のようにクエリパラメータを追加する必要があります 。リソースの表示にFreemarkerhttp://myapp/index/.?type=xml を使用し、この場合はパーセントエンコードハックを行いました。

<#if key?matches("\\.")>
<li><a href="${contextPath}/index/%2E">${key}</a></li>
</#if>

これはFirefoxで正常に機能します。しかし、IE、Safari、Chrom、Operaなどの他のすべてのブラウザは、URLエンコードされたドット(http://myapp/index/%2E)を無視します。

助言がありますか?

4

2 に答える 2

25

パーセントエンコードされたバージョンであるか、エスケープされていないバージョンと同じthis-folder / up-a-folderの意味を持つことになっているのかは、実際には標準(RFC 3986 )で明確に述べられていません。セクション3.3では、「パスセグメントと」についてのみ説明し、それらが一致するかどうか、およびpctエンコードの前後を明確にしません。.........

個人的には、Firefoxの解釈は最も実用的で%2Eはないことがわかり.ましたが、残念ながら他のすべてのブラウザは同意していません。.これは、またはのみを含むパスコンポーネントを持つことができないことを意味します..

考えられる唯一の提案は「そうしないでください」だと思います。他にも厄介なパスコンポーネントがあります。これは通常、サーバーの制限が原因です。パス%2F%00%5Cシーケンスも一部のWebサーバーによってブロックされる可能性があり、空のパスセグメントも問題を引き起こす可能性があります。したがって、一般に、すべての可能なバイトシーケンスをパスコンポーネントに適合させることはできません。

于 2010-10-04T16:16:18.383 に答える
13

それは不可能。§2.3は「。」と言っています は予約されていない文字であり、「予約されていない文字を対応するパーセントエンコードされたUS-ASCIIオクテットで置き換える点が異なるURIは同等です」。したがって、はと/%2E%2E/同じ/../であり、正規化されます。

(これは、bobinceによる回答とslowpoisonによるコメントの組み合わせです。)

于 2014-07-21T14:18:29.233 に答える