Правило перезаписи IIS, как проверить, существует ли файл requesturl + .php в правиле - PullRequest
0 голосов
/ 29 сентября 2011

Я хочу проверить, существует файл или нет .php + .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 Ответ

1 голос
/ 13 декабря 2011

Измените {REQUEST_FILENAME}\.php на {REQUEST_FILENAME}.php в первом правиле.

Далее нет необходимости проверять, существует ли запрошенный URL как каталог.

Чтобы переписать 'test.com/login'на 'test.com/login.php' только при выходе из 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>

Проверено

...