我有一个用 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>