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

问题描述:

我有一个网站路由PHP。IIS 7重写规则抛出HTTP错误403.14 - 禁止如果文件夹存在

我已经把这个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> 

它的作品确定为我所有的网站的路线,除非路由匹配一个现有目录。

我有这样的文件夹结构:

index.php 
cursos/img 
assets/img 

我的网站上没有问题的路线管理,如:/paginas/paginas/contactocursos/masinformacion/10cursos/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> 

而且现在是:

<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> 

但它仍然无法正常工作。它看起来像IIS试图运行重写规则

问题的发生是因为尾随slash.You可以分两步解决这个问题之前访问cursos文件夹:

1.Fix你的正则表达式来^cursos(\/?)$

2 。首先移动此规则:

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

谢谢!它完美的作品 –