2017-07-29 38 views
10

Tôi có một trang web được định tuyến bằng php.Quy tắc ghi lại IIS 7 ném Lỗi HTTP 403.14 - Bị cấm nếu thư mục tồn tại

Tôi đã đặt này vào file 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> 

Nó hoạt động ok cho tất cả các tuyến trang web của tôi, trừ khi trận đấu đường một thư mục hiện có.

Tôi có thư mục cấu trúc này:

index.php 
cursos/img 
assets/img 

trang web của tôi quản lý không có vấn đề các tuyến đường như: /paginas, /paginas/contacto, cursos/masinformacion/10, cursos/img/banner.jpg, vv ...

Nhưng nếu tôi cố gắng goto /cursos i get: Lỗi HTTP 403.14 - Bị cấm

Tôi đã thêm các dòng này vào web.config tệp:

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

Và bây giờ là:

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

Nhưng nó vẫn không hoạt động. Dường như IIS cố gắng truy cập vào thư mục cursos trước khi chạy các quy tắc viết lại

Trả lời

4

Vấn đề xảy ra vì trailing slash.You thể sửa chữa nó theo hai bước:

1.Fix regexp của bạn để ^cursos(\/?)$

2 .Chuyển quy tắc này ở địa điểm đầu tiên:

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

Cảm ơn bạn! Nó hoạt động hoàn hảo –

Các vấn đề liên quan