IIS 7重写规则抛出HTTP错误403.14 - 如果文件夹存在则禁止

Jua*_*bío 9 php iis iis-7 rules

我有一个由php路由的网站.

我把它放在web.config文件中:

<rewrite>
  <rules>

    <!-- Quitar los slash '/' del final de la ruta -->
    <rule name="RewriteRequestsToPublic">
      <match url="^(.*)$" />
      <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
      </conditions>
      <action type="Rewrite" url="/{R:0}" />
    </rule>

    <!-- la ruta /cursos/ directamente la redirigimos para que no dé error 403.14 al intentar 'explorar' el directorio -->
    <rule name="cursos redirect" stopProcessing="true">
      <match url="^cursos$" />
      <action type="Rewrite" url="/index.php/{R:1}" appendQueryString="true" />
    </rule>

    <!-- Si el archivo o carpeta solicitado no existe, se realiza la petición a través de index.php -->
    <rule name="Imported Rule 1" stopProcessing="true">
      <match url="^(.*)$" ignoreCase="true" />
      <conditions logicalGrouping="MatchAll">
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
      </conditions>
      <action type="Rewrite" url="/index.php/{R:1}" appendQueryString="true" />
    </rule>
  </rules>
</rewrite>
Run Code Online (Sandbox Code Playgroud)

它适用于我的所有站点路由,除非路由匹配一个现有目录.

我有这个文件夹结构:

index.php
cursos/img
assets/img
Run Code Online (Sandbox Code Playgroud)

我的网站管理没有问题的途径,如:/paginas,/paginas/contacto,cursos/masinformacion/10,cursos/img/banner.jpg,等...

但如果我尝试转到/cursos我得到:HTTP错误403.14 - 禁止

我已将这些行添加到web.config文件中:

<!-- la ruta /cursos/ directamente la redirigimos para que no dé error 403.14 al intentar 'explorar' el directorio -->
<rule name="cursos redirect" stopProcessing="true">
  <match url="^cursos$" />
  <action type="Rewrite" url="/index.php/{R:1}" appendQueryString="true" />
</rule>
Run Code Online (Sandbox Code Playgroud)

现在是:

<rewrite>
  <rules>

    <!-- Quitar los slash '/' del final de la ruta -->
    <rule name="RewriteRequestsToPublic">
      <match url="^(.*)$" />
      <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
      </conditions>
      <action type="Rewrite" url="/{R:0}" />
    </rule>

    <!-- la ruta /cursos/ directamente la redirigimos para que no dé error 403.14 al intentar 'explorar' el directorio -->
    <rule name="cursos redirect" stopProcessing="true">
      <match url="^cursos$" />
      <action type="Rewrite" url="/index.php/{R:1}" appendQueryString="true" />
    </rule>

    <!-- Si el archivo o carpeta solicitado no existe, se realiza la petición a través de index.php -->
    <rule name="Imported Rule 1" stopProcessing="true">
      <match url="^(.*)$" ignoreCase="true" />
      <conditions logicalGrouping="MatchAll">
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
      </conditions>
      <action type="Rewrite" url="/index.php/{R:1}" appendQueryString="true" />
    </rule>
  </rules>
</rewrite>
Run Code Online (Sandbox Code Playgroud)

但它仍然无效.看起来IIS cursos在运行重写规则之前尝试访问该文件夹

Vic*_*yev 3

由于尾部斜杠而发生问题。您可以通过两个步骤修复它:

1.将你的正则表达式修复为^cursos(\/?)$

2.将此规则移至第一位:

<rule name="cursos redirect" stopProcessing="true">
  <match url="^cursos(\/?)$" />
  <action type="Rewrite" url="/index.php/{R:0}" appendQueryString="true" />
</rule>
Run Code Online (Sandbox Code Playgroud)