在我的工作中,我被要求将在iis / azure上运行的PHP应用程序迁移到通过GNU Linux机器上的Nginx和fpm运行.
然后在此过程中,我遇到了一个名为web.config的文件,其中包含条目,例如:
<action name="SomeName" stopProcessing="true">
<match url=".*" ignoreCase="true" />
<conditions>
<add input="{URL}" pattern="^some_regex^">
</conditions>
<action type="Rewrite" url="index.PHP?someaction={C:1}">
</action>
要么
<action name="SomeName" stopProcessing="true">
<match url=".*" ignoreCase="true" />
<conditions>
<add input="{URL}" pattern="^some_regex^">
</conditions>
<action type="Rewrite" url="index.PHP?someaction={R:1}">
</action>
到目前为止,我认为像这样的Nginx映射:
^some_regex^ index.PHP?someaction=$1;
会在两个动作中都做得到(以某种方式).但是我仍然无法理解正则表达式机器上的{C:1}和{R:1}之间的区别,我知道在我的Nginx中会像$1(一个subregex匹配项),但是与web.config的区别是{C: 1}和{R:1}项?
我问是因为我可能需要更改Nginx的subregex匹配项,以便确定匹配项是{C:1}还是{R:1}.
最佳答案
这是你的答案
对条件模式的后向引用由{C:N}标识,其中N为0到9.对规则模式的后向引用由{R:N}标识,其中N为0到9.请注意,对于两种类型的向后引用{R:0}和{C:0}将包含匹配的字符串.有关更多详细信息,请查看:IIS URL Rewrite {R:N} clarification