我注意到,在.NET MVC站点中,您可以使用多个正斜杠来访问URL,例如:
http://www.example.com//category
http://www.example.com//category//product
URL加载正常,一切正常,但是,我被要求阻止这种情况发生。
我一直在尝试使用IIS URL重写来让它工作:
<rewrite>
<rules>
<rule name="Remove multiple slashes" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{UNENCODED_URL}" matchType="Pattern" pattern="^(.*)//(.*)$" />
</conditions>
<action type="Redirect" redirectType="Permanent" url="{C:1}/{C:2}" />
</rule>
</rules>
</rewrite>
然而,结果看起来很不稳定。有时产品URL会重定向,有时不会,同样的事情也会发生在类别上。这几乎就像URL被应用程序缓存一样。
有谁知道我是否可以禁用任何缓存,或者是否有其他方法来解决这个多斜杠问题?
任何帮助都非常感谢。
4条答案
按热度按时间nkhmeac61#
最后,我不得不使用重定向背后的代码来让它工作。
我使用IIS URL重写的问题是由于IIS缓存重定向的方式。当我完全禁用缓存时,正如WouterH所建议的那样,它工作了。然而,我不舒服以这种方式禁用缓存,因为它可能会引入性能问题。
我的解决方法是在Global.asax.cs文件中使用代码重定向:
我本来想使用IIS URL重写来完成这个工作,不幸的是我没有时间继续下去。
有趣的是,下面的方法确实有效,但是,
HTTP_X_REWRITE_URL
是由我在本地运行的Helicon ISAPI重写添加的,但在我们的生产服务器上不可用。yftpprvb2#
URL重写模块
由于IIS会自动使用双斜杠规范化URL,您可以尝试重定向到规范化的URL,如下所示:
您也可以尝试disable caching of the URL rewrite module:
关闭重写规则内部缓存
要在URL重写模块中禁用入站重写规则的缓存,请从提升的命令提示符运行以下命令:
reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp\Rewrite /v RewriteCacheEnabled /t REG_DWORD /d 0
我有一个小的感觉,你将不得不重新启动Web服务器后,这一变化:)
其他选项#1:不可缓存的服务器变量
这个想法突然出现在我的脑海里:
HTTP_USER_AGENT
*您可以浏览其他服务器变量here
其他选项#2:清除浏览器缓存
在Web开发过程中,请确保使用Ctrl+F5刷新页面,或在进行更改(如更新重写规则等)后清除浏览器缓存。否则,您可能会花费数小时的时间来观察同样的问题,而只是您的浏览器需要刷新其缓存。
其他选项#3:IIRF
如果你真的不能让它与IIS URL重写模块一起工作,你可以给予开源的ISAPI模块IIRF。它接受类似于Apache的
mod_rewrite
的规则。yc0p9oo03#
试着跟随
mznpcxlj4#
我们可以在web.config文件中使用下面的IIS重写规则。我已经从Google搜索控制台中解决了这个问题,并使用下面的代码永久修复了它。
下面的代码将删除URL中的任何地方的双斜杠。