如何在IIS Express下启用区分大小写?

时间:2011-04-27 21:48:25

标签: asp.net url-routing case-sensitive iis-express

如果使用IIS Express,我应该如何启用区分大小写的请求处理? IIS Express中有设置吗?或者URL重写规则可以实现此目的吗?或者也许是全能的HTTP Handler进行案例检查?

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

由于

2 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:0)

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

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

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

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

更令我困扰的是S3文件系统区分大小写的原因。
这是一件非常糟糕的事情,如果有人输错了您的网址,或者如果搜索引擎将其缩小,则会得到404 ...
我可以建议您不要看看如何让窗口区分大小写,而是看看如何让S3变得不区分大小写,这可能是更好的方法。

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

简而言之,您创建了一个希望大小为X字节的.dsk文件(X = count * blocksize) 使用不区分大小写的文件系统格式化它(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

或者您可以在每次系统重启/启动时添加一个安装此特定文件系统的启动脚本。