7

How should I go about enabling case sensitive request handling if using IIS Express? Is there a setting in IIS Express? or can a URL Rewrite rule accomplish this? or perhaps catch-all HTTP Handler to do the case check?

The goal is to be able to catch case inconsistencies locally, with respect to static files, before deployment to both IIS and S3 (where S3 is case sensitive).

Thanks

4

2 に答える 2

17

IISでは大文字と小文字が区別されます...

...しかし、ファイル用ではありません。

IIS が大文字と小文字を区別しないというのは誤解です。大文字と小文字を区別しないのは Windows ファイル システムであり、IIS ではありません。URL にファイル パスが含まれている場合、IIS は Windows にファイルが存在するかどうかを尋ね、OS は大文字と小文字を区別せずに応答します。Windows でファイル名の大文字と小文字の区別を "有効にする" 方法はありません。

ただし、実際のファイル パス以外の場合、IIS は 100% 大文字と小文字を区別します。URL 文字の大文字と小文字はそのまま IIS パイプラインに渡されます。大文字と小文字を区別するかどうかは、Web アプリケーション次第です。/page1しかし、良い習慣は、あなたが と違いたくないと言います/PAGE1

ASP.NET は、クエリ文字列変数名の大文字と小文字を区別しません。繰り返しますが、これはIISではありません。大文字と小文字を区別しないのはアプリケーション (ASP.NET) です。

概要

静的ファイル パスでは、大文字と小文字が区別されません (IIS ではなく Windows OS のため)。

http://example.com/sUbdiRectoRy/FILe.aspx

ただし、ファイル パスに含まれていない URL の部分では、大文字と小文字が区別されます ( file.aspx.aspx は ASP.NET リソースであるため、「x」パラメーターを除く以下のすべて)。

http://example.com/sUbdiRectoRy/FILe.aspx/Extra/Tail?x="query parameter"

アプリケーションが大文字と小文字を区別する場合、書き換え、HttpModules などによって動的に生成される URL も大文字と小文字が区別されます。これらの 2 つの URL は 2 つの別個の Web ページを参照するため、通常、これはベスト プラクティスではありません。

http://example.com/2012/01/23/blog-article
http://example.com/2012/01/23/BLOG-ARTICLE
于 2012-01-24T01:57:21.900 に答える
0

ケビン ライスが指摘したように、これは IIS とは関係ありません。
これはすべて、ファイル システム、ファイル システム ドライバー、およびオペレーティング システム/asp.net に関するものです。

Windows 2000 以降のデフォルトのファイル システムは NTFS で、大文字と小文字は区別されません。必要なのは大文字と小文字を区別するファイル システムであるため、大文字と小文字を区別する Windows 用のファイル システム ドライバを探す必要があります。

通常のデフォルトの Linux ファイル システム (ext2/ext3/ext4 と呼ばれる) は、すべて大文字と小文字が区別されます。これらの Windows ドライバーは、http: //www.ext2fsd.com/にあります。

アプリケーションをそのファイル システムに配置し、そこからアプリケーションを起動するように IIS を構成するだけです (Linux をデュアル ブート インストールして、実際にそのコンピュータに ext4 パーティションを作成することもできます。注意してください。これを間違えると、データが失われる可能性があります)。

さらに気になるのは、S3 ファイル システムで大文字と小文字が区別される理由です。
これは非常に悪いことです。誰かが URL を間違って入力したり、検索エンジンが URL を小文字にしたりすると、404 が返されます。Windows で大文字と小文字

を区別する方法を調べる代わりに、 S3 で大文字と小文字を区別しないようにすることができます。これがおそらくより良いアプローチです。

私はS3を知らないので、S3でそれを行う方法を実際には知りません。
ただし、私が知っているのは Linux (おそらく Amazon S3 が使用している) です。そのため、独自のファイル システムを作成できる場合は、この投稿の最後に(コメント アウトされた) 方法があります

簡単に言えば、必要なサイズ X バイト (X = カウント * ブロックサイズ) の .dsk ファイルを作成し、大文字と小文字を区別しないファイルシステム (vfat、jsf、hfsplus) でフォーマットし、/mnt/whatever にループマウントします。

次に、Web アプリケーションを /mnt/whatever に配置し、そこに Web アプリケーションのルート ディレクトリを構成します。

JFS で -O を省略すると、大文字と小文字が区別されることに注意してください。

apt-get install jfsutils
dd if=/dev/zero of=jfs.dsk bs=1048576 count=150
mkfs.jfs -O jfs.dsk
mkdir -p /mnt/jfs
mount /volumes/jfs.dsk /mnt/jfs -t jfs -o loop
umount /mnt/jfs/

または hfs-plus でこのように (最高のパフォーマンス、HFS: ハイパフォーマンス ファイルシステム)

sudo apt-get install hfsprogs
sudo modprobe hfsplus
sudo dd if=/dev/zero of=hfsplus.dsk bs=1048576 count=150
sudo mkfs.hfsplus /volumes/hfsplus.dsk
sudo mount /volumes/hfsplus.dsk /mnt/hfsplus -t hfsplus -o loop
umount /mnt/hfsplus/

また、何もインストールしたくない (またはインストールできない) 場合は、通常、デフォルトで vfat がインストールされます。

mkfs -T vfat /volumes/vfat.dsk

また、Linux の Red-Hat 派生ディストリビューション (S3 など) は apt-get を使用せず、rpm/yum を使用します。

また、ファイルシステムを永続的にマウントしたい場合は、https/etc/fstab ://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/4/html/Introduction_To_System_Administration/ の詳細に エントリを追加する必要があります。 s2-storage-mount-fstab.html

または、システムの再起動/起動のたびにこの特定のファイル システムをマウントする起動スクリプトを追加できます。

于 2014-06-03T09:58:44.490 に答える