.htaccess URL重写失败,没有尾部斜杠,也将感谢推荐的调整速度

.htaccess URL重写失败,没有尾部斜杠,也将感谢推荐的调整速度,.htaccess,mod-rewrite,url-rewriting,.htaccess,Mod Rewrite,Url Rewriting,我正在IIS8上配置URL重写,并使其大部分工作正常。我对这些东西没有太多的经验,所以我需要一个不能正常工作的东西的帮助,我希望听到一些关于修改其他东西的反馈,以使它更好、更快,等等 文件夹结构: /web数据/ABC(包含CMS系统) /网络数据/deptOne /web数据/deptTwo /网络数据/解压 (每个dept文件夹包含一个index.php文件,其中包含几个简单的CMS字段,并指向ABC系统目录。) 什么不起作用: 如果主部门URL的尾部斜杠被删除,则无法加载正确的部门页面

我正在IIS8上配置URL重写,并使其大部分工作正常。我对这些东西没有太多的经验,所以我需要一个不能正常工作的东西的帮助,我希望听到一些关于修改其他东西的反馈,以使它更好、更快,等等

文件夹结构:
/web数据/ABC(包含CMS系统)
/网络数据/deptOne
/web数据/deptTwo
/网络数据/解压

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


什么不起作用:
如果主部门URL的尾部斜杠被删除,则无法加载正确的部门页面,而是加载默认的ABC页面

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

作品:
example.com/ABC
example.com/ABC/services/stuff
example.com/deptone/
example.com/deptone/services/stuff

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

谢谢你的帮助

我改变了:

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

这似乎解决了尾随斜杠的问题。(斜线后添加问号)


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

在您的
match
元素中,我将使用以下模式:

^(deptOne|deptTwo|deptThree)(/.*)?$
这要求如果部门名称后出现任何字符,则这些字符前必须出现正斜杠(例如,deptOneExtra不匹配)

请注意(如果部门名称后面出现任何内容),第二个捕获组捕获的序列将以正斜杠开始。通过获取捕获序列的子字符串,可以很容易地删除此项,但如果您确实不想捕获正斜杠,则可以这样做:

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

在正则表达式中,
(?:
语法表示“非捕获组”,允许您定义一个组而不捕获它匹配的内容。因此,第二个捕获组应该只捕获正斜杠后面的字符,而不捕获正斜杠本身。

请记住,您的新模式将匹配“deptOneExtra”并将这个(单个)目录名分成两部分,诱使您认为您收到了“deptOne/Extra”请求,而事实并非如此。谢谢,这是有道理的。
^(deptOne|deptTwo|deptThree)(/.*)?$
^(deptOne|deptTwo|deptThree)(?:/(.*))?$