如果使用 IIS Express,我应该如何启用区分大小写的请求处理?IIS Express 中有设置吗?或者 URL 重写规则可以做到这一点吗?或者可能是包罗万象的 HTTP 处理程序来进行案例检查?
目标是能够在部署到 IIS 和 S3(其中 S3 区分大小写)之前就静态文件在本地捕获大小写不一致。
谢谢
如果使用 IIS Express,我应该如何启用区分大小写的请求处理?IIS Express 中有设置吗?或者 URL 重写规则可以做到这一点吗?或者可能是包罗万象的 HTTP 处理程序来进行案例检查?
目标是能够在部署到 IIS 和 S3(其中 S3 区分大小写)之前就静态文件在本地捕获大小写不一致。
谢谢
...但不适用于文件。
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
正如 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
或者您可以添加一个启动脚本,在每次系统重新启动/启动时挂载这个特定的文件系统。