7

如果使用 IIS Express,我应该如何启用区分大小写的请求处理?IIS Express 中有设置吗?或者 URL 重写规则可以做到这一点吗?或者可能是包罗万象的 HTTP 处理程序来进行案例检查?

目标是能够在部署到 IIS 和 S3(其中 S3 区分大小写)之前就静态文件在本地捕获大小写不一致。

谢谢

4

2 回答 2

17

IIS区分大小写...

...但不适用于文件。

IIS不区分大小写是用词不当,不区分大小写的是Windows文件系统,而不是IIS。如果 URL 包含文件路径,则 IIS 会询问 Windows 文件是否存在,并且操作系统会响应而不考虑字母大小写。没有办法在 Windows 中为文件名“启用”区分大小写。

但对于真实文件路径以外的其他文件,IIS 是 100% 区分大小写的。URL 字符的大小写原封不动地传递给 IIS 管道。是否区分大小写取决于 Web 应用程序。但良好的做法是说你不想/page1/PAGE1.

ASP.NET 对查询字符串变量名不区分大小写。再次,这不是IIS。不区分大小写的是应用程序 (ASP.NET)。

概括

静态文件路径不区分大小写(由于 Windows 操作系统,而不是 IIS):

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

但是,不参与文件路径的 URL 部分区分大小写(file.aspx下面的所有内容,除了 'x' 参数,因为 .aspx 是 ASP.NET 资源):

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

如果应用程序区分大小写,则通过重写、HttpModules 等动态生成的 URL 也区分大小写。这通常不是最佳实践,因为这两个 URL 将引用两个单独的网页:

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

正如 Kevin Rice 已经指出的,这与 IIS 无关。
这都是关于文件系统、文件系统驱动程序和操作系统/asp.net 的。

Windows 2000+ 的默认文件系统是 NTFS,它不区分大小写。您需要的是一个区分大小写的文件系统,因此您应该为 Windows 寻找一个区分大小写的文件系统驱动程序。

通常的默认 Linux 文件系统(称为 ext2/ext3/ext4)都区分大小写。您可以在这里找到它们的 Windows 驱动程序:http ://www.ext2fsd.com/

您需要做的就是将您的应用程序放在该文件系统上,并配置 IIS 以从那里启动应用程序(您可能希望双引导安装 Linux,因此您实际上在那台计算机上有一个 ext4 分区 - 小心,如果你做错了,你的数据可能会消失)。

更困扰我的是为什么 S3 文件系统区分大小写。
这是一件非常糟糕的事情,如果有人错误输入了您的 URL,或者如果搜索引擎将其小写,您会得到 404...

我可以建议您不要查看如何让窗口区分大小写,而是查看如何您可以让 S3 变得不区分大小写,这可能是更好的方法。

我实际上不知道如何在 S3 上做到这一点,因为我不知道 S3。
然而,我所知道的是 Linux(Amazon S3 可能正在使用它),所以如果您可以制作自己的文件系统,在我的帖子底部,可以找到(注释掉)这样做的方法。

简而言之,您创建一个所需大小为 X 字节 (X = count * blocksize) 的 .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

此外,Red-Hat 派生的 Linux 发行版(如 S3)不使用 apt-get,它们使用 rpm/yum。

而且,如果您希望永久挂载文件系统,则需要/etc/fstab 在此处添加更多条目: https ://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 回答