![IIS 重定向规则仅在引用时不带尾部斜杠时捕获文件夹](https://linux22.com/image/692291/IIS%20%E9%87%8D%E5%AE%9A%E5%90%91%E8%A7%84%E5%88%99%E4%BB%85%E5%9C%A8%E5%BC%95%E7%94%A8%E6%97%B6%E4%B8%8D%E5%B8%A6%E5%B0%BE%E9%83%A8%E6%96%9C%E6%9D%A0%E6%97%B6%E6%8D%95%E8%8E%B7%E6%96%87%E4%BB%B6%E5%A4%B9.png)
我有一个用 PHP 构建的网站,需要通过 ISS 来销毁它,除了一个小细节之外,一切都运行正常。
它在子目录下运行,比如说测试。如果我在浏览器中访问该网站“http://域名/“它工作正常。但是如果我省略尾部斜杠并访问”http://域名“该网站出现 404 错误。
现在这可能是网站自身的内部逻辑错误地执行了此操作,但由于我没有构建它,所以我不想深入研究。我认为我可以使用 web.config 重定向规则来解决这个问题。换句话说,检测 URL 末尾是否没有尾部斜杠,然后重定向到带有尾部斜杠的等效位置。即...
<rules>
<rule name="Add trailing slash" stopProcessing="true">
<match url="" />
<action type="Redirect" redirectType="Permanent" url="/" />
</rule>
这几乎可行,但实际上却不行。当我访问没有尾部斜杠的域名时,规则会被采纳,但不幸的是,当 URL 带有尾部斜杠时也会触发该规则,因此我的浏览器中最终出现无限重定向错误。
有任何想法吗?
答案1
规则模式中/
确实没有将根传递给。但是,您可以通过条件中的服务器变量对其进行测试:url
<match>
{PATH_INFO}
<rule name="Add trailing slash">
<match url="^$" />
<conditions>
<add input="{PATH_INFO}" pattern="/$" negate="true" />
</conditions>
<action type="Redirect" url="{PATH_INFO}/" redirectType="Permanent" />
</rule>