2013-08-01 35 views
7

Tôi đang triển khai trang web trên Azure và tôi đang cố viết các quy tắc viết lại cho trang web.Tại sao tôi nhận được 500 khi tôi thêm quy tắc viết lại vào Web.config của mình trong Azure?

Tôi có đoạn code sau, và nó hoạt động:

<configuration> 
    <system.webServer> 
    <rewrite> 
     <rules> 
     <rule name="Sendy all" stopProcessing="true"> 
      <match url="^(.+?)$" ignoreCase="true" /> 
      <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> 
       <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
       <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
      </conditions> 
      <action type="Rewrite" url="index.php" appendQueryString="true" /> 
     </rule> 
     <rule name="Sendy all" stopProcessing="true"> 
      <match url="^api/(.+?)$" ignoreCase="true" /> 
      <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> 
       <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
      </conditions> 
      <action type="Rewrite" url="index.php" appendQueryString="true" /> 
     </rule> 
     </rules> 
    </rewrite> 
    </system.webServer> 
</configuration> 

nhưng khi tôi thêm đoạn mã sau bên trong thẻ quy tắc tôi nhận được thông báo lỗi The page cannot be displayed because an internal server error has occurred. Tại sao?

<rule name="Sendy all" stopProcessing="true"> 
    <match url="^api/(.+?)$" ignoreCase="true" /> 
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> 
     <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
    </conditions> 
    <action type="Rewrite" url="index.php" appendQueryString="true" /> 
</rule> 
+0

Tôi nghĩ bạn nên định dạng lại câu hỏi của mình. Tôi không thể biết bạn đang thêm quy tắc gì. Cái thứ ba giống với cái thứ hai mà bạn làm việc. Tất cả ba quy tắc (hai bản sao) đều có cùng tên. Tôi khuyên bạn nên đăng một phiên bản hoạt động và một phiên bản không hoạt động. –

Trả lời

2

Tôi cho rằng ấn bản đầu tiên sẽ không hoạt động. Quy tắc thứ hai từ ấn bản đầu tiên giống như ấn bản thứ hai.

Vấn đề của bạn là Quy tắc có cùng thuộc tính tên Sendy all. Đây là trong Cấu hình Web bất hợp pháp. Đổi tên một quy tắc.

Ngoài ra hãy xem tại nút này (nào là tốt cho Debugging):

<?xml version="1.0" encoding="UTF-8" ?> 
<configuration> 
    <system.webServer> 
     <httpErrors errorMode="Detailed" /> 
    </system.webServer> 
</configuration> 

Hãy chắc chắn rằng, đây là một trong những điều đầu tiên trong web.config. Sau đó, bạn sẽ nhận được Mã lỗi 500.52 với mô tả chi tiết, cho biết lỗi này.

Bên cạnh vấn đề, tôi không hiểu những gì bạn đang cố gắng. Xem xét để cung cấp cho các Yêu cầu Index PHP của bạn:

<rule name="Sendy all" stopProcessing="true"> 
     <match url="^api/(.+?)$" ignoreCase="true" /> 
     <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> 
      <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
     </conditions> 
     <action type="Rewrite" url="index.php?api=1&amp;request={R:1}" appendQueryString="true" /> 
    </rule> 

Nếu bạn gọi website.tld/api/IBar/DoFoo bạn có thể viết:

$isApi = isset($_GET['api']); //Was the API Rule Affected? 
$request = isset($_GET['request']) ? $_GET['request'] : ''; //"IBar/DoFoo" 

Nếu bạn không trích xuất chi tiết, và cung cấp cho họ như Parameter, toàn bộ Url Rewrite điều làm cho không có sence.

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