IIS 7 重写规则抛出 HTTP 错误 403.14 - 如果文件夹存在则禁止访问
IIS 7 Rewrite rule throws HTTP Error 403.14 - Forbidden if folder exists
我有一个网站由 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>
它适用于我所有的站点路由,除非路由匹配一个现有目录。
我有这个文件夹结构:
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 试图在 运行 重写规则
之前访问 cursos
文件夹
由于尾随出现问题 slash.You 可以分两步解决:
1.Fix 你的正则表达式 ^cursos(\/?)$
2.Move这条规则第一名:
<rule name="cursos redirect" stopProcessing="true">
<match url="^cursos(\/?)$" />
<action type="Rewrite" url="/index.php/{R:0}" appendQueryString="true" />
</rule>
我有一个网站由 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>
它适用于我所有的站点路由,除非路由匹配一个现有目录。
我有这个文件夹结构:
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 试图在 运行 重写规则
之前访问cursos
文件夹
由于尾随出现问题 slash.You 可以分两步解决:
1.Fix 你的正则表达式 ^cursos(\/?)$
2.Move这条规则第一名:
<rule name="cursos redirect" stopProcessing="true">
<match url="^cursos(\/?)$" />
<action type="Rewrite" url="/index.php/{R:0}" appendQueryString="true" />
</rule>