IIS重写规则如何检查requesturl + .php文件是否存在于规则中

时间:2011-09-29 10:11:52

标签: mod-rewrite iis-7 url-rewriting

我想检查带有requestedurl + .php的文件是否存在。

在apache中我可以使用RewriteCond%{REQUEST_FILENAME} .php -f

这样它就可以将我的请求test.com/login重写为test.com/login.php

我想对iis重写规则做同样的事。

我试过以下。

<rewrite>
  <rules>
    <rule name="Imported Rule 1" stopProcessing="true">
      <match url="^(.*)$" />
      <conditions>
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
        <add input="{REQUEST_FILENAME}\.php" matchType="IsFile" />
      </conditions>
      <action type="Rewrite" url="{R:1}.php" />
    </rule>
    <rule name="Imported Rule 2">
      <match url="^(.*)$" />
      <conditions>
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
      </conditions>
      <action type="Rewrite" url="allpages.php" />
    </rule>
  </rules>
</rewrite>

但它不起作用。

提前感谢您的帮助

1 个答案:

答案 0 :(得分:1)

在第一条规则中将{REQUEST_FILENAME}\.php更改为{REQUEST_FILENAME}.php

此外,无需检查请求的URL是否作为目录存在。

仅在login.php退出时才将'test.com/login'重写为'test.com/login.php',请使用:

<rule name="Rewrite to PHP">
  <match url="^(.*)$" />
  <conditions>
    <add input="{REQUEST_FILENAME}.php" matchType="IsFile" />
  </conditions>
  <action type="Rewrite" url="{R:0}.php" />
</rule>

测试