【发布时间】:2017-08-07 21:45:30
【问题描述】:
我最近在我的本地主机上切换到了 IIS,但我遇到了一些我不明白的事情。
我有一个类似设置的重写规则。
<rule name="Pages" stopProcessing="true">
<match url="^page/(.*)/$" ignoreCase="true" />
<action type="Rewrite" redirectType="Permanent" url="/resources/pages/getPage.php?page={R:0}" />
</rule>
这是正常工作的地方
localhost/page/login/
会带你去
localhost/resources/pages/getPage.php?page=login
getPage.php 将在哪里为用户提供所需的页面。
当我跑步时
$_GET['page]
在它返回的 getPage.php 脚本上
page/login/
这与没有前导“/”的 $_SERVER['REQUEST_URI'] 相同,我希望它只会导致“登录”。在运行 Apache 时,这就是它的工作方式。那么 IIS 处理这种重写的方式有什么问题或不同呢?
【问题讨论】:
-
我认为第一个匹配
R:0是完整匹配(完整的字符串),而R:1是第一个捕获组(即login)。用?page={R:1}试试看它是否有效。 -
谢谢,这确实有效,但仍然与我在 Apache 中收到的结果不同。例如,如果我发送 URL localhost/page/login/test/10,{R:1} 如您所指出的那样返回 login/test/10。但在 Apache 中,它只是登录。我猜它会将它们分成几对。
-
那是因为你有
(.*)/$,它是“捕捉到最后一个斜线的所有内容”。这与 Apache 中的 mod_rewrite 相同。 -
正则表达式将它们成对捕获是什么?
-
我确实需要在正则表达式方面做得更好。谢谢,我会看看我能不能让它工作。
标签: php iis url-rewriting