URL 重写失败而没有尾部斜杠,也希望对速度进行调整推荐

URL Rewrite fails without trailing slash, also would appreciate recommended tweaks for speed

我正在 IIS 8 上配置 URL Rewrite 并使其大部分正常工作。我对这方面的经验不是很丰富,所以我需要帮助来解决一件无法正常工作的事情,并且很想听听一些关于还需要修改什么以使其更好、更快等的反馈。

文件夹结构:
/web data/ABC (包含CMS系统)
/网络data/deptOne
/网络data/deptTwo
/网络data/deptThree

(每个部门文件夹包含一个 index.php 文件,其中包含一些简单的 CMS 字段并指向 ABC 系统目录。)

<rule name="ABC depts" enabled="true" stopProcessing="true">
    <match url="^(deptOne|deptTwo|deptThree)/(.*)$" ignoreCase="true" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{URL}" pattern="(css|scripts|images|js|inc)" negate="true" />
    </conditions>
    <action type="Rewrite" url="{R:1}/index.php?/{R:1}/{R:2}" appendQueryString="false" />
</rule>
<rule name="ABC" enabled="true" stopProcessing="true">
    <match url="^(.*)$" ignoreCase="true" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{URL}" pattern="^(/ABC/ABC_system|/ABC/themes|/ABC/admin.php)" negate="true" />
        <add input="{URL}" pattern="(css|scripts|images|js|inc)" negate="true" />
    </conditions>
    <action type="Rewrite" url="ABC/index.php?/{R:1}" appendQueryString="false" />
</rule>

什么不起作用:
如果在主要部门 URL 后面遗漏斜线,则无法加载正确的部门页面,而是加载默认的 ABC 页面。

失败:
例如。com/deptone
(请注意,这是一个没有尾部斜杠的部门主页)

作品:
例如。com/ABC
例如。com/ABC/services/stuff
例如。com/deptone/
例如。com/deptone/services/stuff

两条规则的顺序也会影响它是否有效。这就是我按原样订购的原因。此外,可以更改哪些内容以使其性能尽可能好? (速度,可靠性)

感谢您的帮助

我改了:

^(deptOne|deptTwo|deptThree)/(.*)$

至:

^(deptOne|deptTwo|deptThree)/?(.*)$

这似乎解决了尾部斜线问题。 (斜线后加问号)

如果有人对提高其整体性能(两条规则)有任何建议,我们将不胜感激。

在你的 match 元素中我会使用这个模式:

^(deptOne|deptTwo|deptThree)(/.*)?$

这要求如果部门名称后出现任何字符,则在这些字符之前必须出现正斜杠(例如,这样 deptOneExtra 就不会匹配)。

请注意(如果部门名称后出现任何内容)第二个捕获组捕获的序列将以正斜杠开头。这可以通过获取捕获序列的子字符串轻松删除,但如果您真的不想捕获正斜杠,这可能有效:

^(deptOne|deptTwo|deptThree)(?:/(.*))?$

在正则表达式中,(?: 语法表示 "non-capturing group" 并允许您定义一个组而不捕获它匹配的内容。所以第二个捕获组应该只捕获正斜杠后面的字符,而不是正斜杠本身。