我在 CMS 中设置了用于清理 URL 的 URL 重写,我的 web.config 如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Clean URLs" stopProcessing="true">
<match url="^([^/]+)/?$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="?id={R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
它基本上变成index.php?id=something
了something
干净的 URL。非常简单,而且效果很好。
正如在 CMS 中常见的那样,为了防止后端中断,每个子目录都需要在其 web.config 中使用<remove name="Clean URLs" />
或<clear />
,这样规则就不会被继承。
有没有办法在父规则中指定它根本不应该被其子规则继承,即以某种方式将规则的范围限制为当前目录?类似的东西<rule name="Clean URLs" stopProcessing="true" inherit="no">
将是史诗。
答案1
经过 4.5 小时的 Google 搜索后找到了答案!
http://runtingsproper.blogspot.co.uk/2010/04/solved-breaking-parent-webconfig.html
基本上利用
<location path="." inheritInChildApplications="false">
<system.webServer>
<!-- ... -->
</system.webServer>
</location>
答案2
我最近遇到了这个问题,情况类似。但 rjenkins 的答案似乎会导致依赖父级设置继承的虚拟应用程序出现问题。
如果您知道重写规则的名称,您可以这样做:
<rewrite>
<rules>
<remove name="RewriteNameToDisable" />
</rules>
</rewrite>