我正在 ASP.net 中实现 URL 重写,我的 URL 给我带来了很多问题。
URL 是从部门和类别的数据库中生成的。我希望员工能够使用任何适当的特殊字符将项目添加到数据库中,而不会破坏网站。
我在构建 URL 之前对数据进行编码。
有几个问题...
- IIS 在 URL 到达 .net 之前对其进行解码,因此无法正确解析其中包含“/”的任何内容。
- ASP.net 被 url 弄糊涂了,使得“~”在某些页面中无用
- 我从内置测试服务器迁移到我的本地 IIS 服务器(XP 机器),任何包含编码 & (%26) 的 URL 都会给我一个“错误请求”错误。
- UrlEncode 保留了一些中断字符,例如“。”
我确实有另外两个关于这个主题的相关帖子,当时我只看到了上游的小问题而不是大问题。我找到了一些注册表技巧来解决“错误请求”问题,但我将部署到共享托管环境,这使得它变得毫无用处。我也知道这是对某些安全问题的修复,所以我不想在不知道我打开什么蠕虫的情况下绕过它。
与其试图强制 .net 将原始 url 传递给我,或者覆盖 IIS 设置,不如首先创建真正安全的 URL。
我会注意到我已经尝试过 AntiXss.URLEncode、HttpUtility.URLEncode、URI.EscapeDataString。我什至尝试过双 URLEncodng 之类的愚蠢操作。是否有一个实用程序可以满足我的需要,或者我真的需要自己动手。我什至正在考虑做一些 Hacky 的事情,比如用不寻常的字符串替换 %。最终结果应该至少是可读的,这是首先使用 URL 重写的重点。
很抱歉发了这么长的帖子——我只是想确保我已经包含了所有必要的细节。我似乎找不到任何相关信息,而且这似乎是一个常见问题 - 所以也许我错过了一些大问题。感谢您的帮助,以及对冗长解释的耐心!
为清楚起见进行编辑:
当我说 url 是从数据库构建的时,我的意思是目录结构是从我的数据库中的部门和类别构建的。
一些示例 URL -
Mystore/Refrigeration/Bar+Fridge.aspx
Mystore/Cooking+Equipment.aspx
Mystore/Kitchen/Cutting+Boards.aspx
当我使用“Beverage & Bar”或“Pastry/Decorating”之类的部门来构建我的 URL 时,问题就出现了。尽管首先被编码,但这些会导致上述问题。
除了特殊字符编码问题外,我的处理程序已经实现并且工作正常。