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" 并允许您定义一个组而不捕获它匹配的内容。所以第二个捕获组应该只捕获正斜杠后面的字符,而不是正斜杠本身。
我正在 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" 并允许您定义一个组而不捕获它匹配的内容。所以第二个捕获组应该只捕获正斜杠后面的字符,而不是正斜杠本身。