47

私は通常、URL書き換えを使用して、コンテンツIDを自分のWebサイトに渡します。したがって、これは

 Foo.1.aspx 

に書き換えます

 Foo.aspx?id=1

特定のアプリケーションでは、複数のIDを1つのページに渡す必要があるため、これを受け入れるように書き直しました。

 Foo.1,2,3,4,5.aspx

これはCassini(Visual Studio用の組み込みのアドホックWebサーバー)では正常に機能しますが、IISを実行しているライブサーバーで試してみると、「InternetExplorerはWebページを表示できません」と表示されます。これはIISの制限ですか?カンマの代わりにダッシュまたはアンダースコアを使用する必要がありますか?

4

8 に答える 8

42

コンマは URL のファイル名部分で使用できますが、私の知る限り、ドメイン* では予約文字です。

使用している IE のバージョンは何ですか? IE5.5 がカンマで URL を切り捨てるという奇妙な報告に遭遇しました (ここにリンクがありますが、IE7 でカンマを含む URL をテストしたところ、問題ないようです。したがって、IE のバグがあったとしても、もうありますか - IIS の問題でしょうか?

ページ エラーがルールの失敗によるものかどうか疑問に思っていますmod_rewrite- 複数の ID に一致し、それらをあなたの に渡すルールを投稿できますFoo.aspxか? 一致するだけFoo.N,Nで、より多くのコンマで失敗する可能性はありますか?


* URI RFCから:

2.2. 予約文字

多くの URI には、特定の特殊文字で構成された、または特殊文字で区切られたコンポーネントが含まれています。これらの文字は、URI コンポーネント内での使用が予約された目的に限定されるため、「予約済み」と呼ばれます。URI コンポーネントのデータが予約された目的と競合する場合、競合するデータは URI を形成する前にエスケープする必要があります。

 reserved    = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" |
                "$" | ","

上記の「予約済み」構文クラスは、URI 内で許可されているが、一般的な URI 構文の特定のコンポーネント内では許可されていない可能性がある文字を指します。

于 2008-10-13T20:07:08.547 に答える
31

デフォルトでは、URL ルーティングは最初にファイルが存在するかどうかを確認し、ファイル名にコンマを使用できないことを思い出します。これがおそらくエラーが発生する理由です。IIS には、処理のために asp.net に到達する前に要求を中止するレガシ コードが含まれている場合があります。

Scott Hanselman のブログ投稿では、これについて少し説明されており、あなたに関係があるかもしれません。


一般的なコメントとして: URL の書き換えは、通常、URL を親しみやすく覚えやすいものにするために使用されます。

~/page.aspx?id=1,2,3,4は より悪くも良くもありません~/page/1-2-3-4.aspx: どちらも使いにくいのに、なぜ余分な努力をする必要があるのでしょうか? できるという理由だけで、新しい URL フォームを作成することは避けてください。ユーザー、ヘルプ デスク、およびその他の開発者は混乱するだけです。

URL 書き換えは、変換に最もよく利用されます

~/products/view.aspx?id=1
~/products/category.aspx?type=beverage

の中へ

~/products/view/1
~/products/category/beverage
于 2008-10-13T22:37:29.257 に答える
19

%2cURL で を使用してコンマを置き換えてみてください。

于 2009-12-22T20:35:13.733 に答える
7

ConroyP による回答に加えて、以下は RFC への別の引用です。いくつかの安全でない文字が記載されていますが、コンマについては言及されていません (コンマが安全であることを示唆しています)。

キャラクターは、さまざまな理由で安全ではない可能性があります。URL が書き起こされたり、タイプセットされたり、ワープロ プログラムの処理を受けると、重要なスペースが消えたり、重要でないスペースが導入されたりする可能性があるため、スペース文字は安全ではありません。文字 "<" と ">" は、フリー テキストの URL の区切り文字として使用されるため、安全ではありません。引用符 (""") は、一部のシステムで URL を区切るために使用されます。文字 "#" は安全ではなく、常にエンコードする必要があります。これは、World Wide Web や他のシステムで URL をフラグメント/アンカーから区切るために使用されるためです。文字 "%" は、他の文字のエンコーディングに使用されるため、安全ではありません。ゲートウェイやその他のトランスポート エージェントがそのような文字を変更することがあることが知られているため、その他の文字は安全ではありません。これらの文字は、"{"、"}"、"|"、"\"、"^"、"~"、"["、"]"、および "`" です。

すべての安全でない文字は、常に URL 内でエンコードする必要があります。たとえば、文字「#」は、通常はフラグメントまたはアンカー識別子を処理しないシステムでも URL 内でエンコードする必要があります。そのため、URL がそれらを使用する別のシステムにコピーされた場合、その URL を変更する必要はありません。 URL エンコーディング。

于 2013-07-22T01:55:29.150 に答える
3

仕様に従って、パス、クエリ文字列、およびフラグメントでコンマを使用できます。IE が仕様に準拠していなくても、私は驚かないでしょう。クラウディウが提案するように実体を試してみてください。しかし、なぜそれが必要なのかわかりません。

于 2008-10-13T18:53:34.637 に答える
1

フロントコントローラーを配置すると、次のようなことができます。

index.aspx?c=Foo/1/2/3/4

フロントコントローラーは、メソッド名とそれに渡すパラメーターを取得します。これは、今日ではかなり一般的な手法です。

于 2008-10-13T21:22:19.673 に答える
1

答え

問題はコンマでした。IEはローカルホストで問題なく表示できたので、IISに問題があったと思います(IEではありません)。

とにかく、URL 形式をこれに変更しただけで、正常に動作します。

Foo.1-2-3-4-5.aspx
于 2008-10-13T20:18:46.727 に答える
0

複数の IDを受け入れる正しい方法は次のとおりです。

Foo.aspx?id=1;id=2;id=3;id=4;id=5

それがまさにターゲットであることに注意してください。URL を書き直すときは、ソースをどのように表示するかについて、ある程度独自のルールを設定できます。

私もStackOverflowでこれを学ばなければなりませんでした。この質問を参照してください:
文字列から整数を分割する

于 2008-10-13T18:49:45.020 に答える