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/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>
而且现在是:
<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>
谢谢!它完美的作品 –