0

На моем сервере Windows 2012 я установил модуль перезаписи URL-адресов в IIS. Я следил за этим руководством для перенаправления не-www на www в web.config: http://www.surfingsuccess.com/asp/iis-url-rewrite.html#.VF6GBid0yAUПереадресовать не WWW в WWW (за исключением одного особого субдомена)

До сих пор так хорошо!

Единственная проблема заключается в том, что мы также размещаем субдомен «api.example.com». Этот API перестает работать, когда я применяю код в web.config.

Мой вопрос: что не так с кодом ниже? Почему субдомен перестает работать, когда я пытаюсь перенаправить не-www на www, кроме «api.example.com»?

<rewrite> 
     <rules> 
      <rule name="CanonicalHostNameRule1"> 
       <match url="(.*)" /> 
       <conditions> 
        <add input="{HTTP_HOST}" pattern="^www\.example\.com$" negate="true" /> 
        <add input="{HTTP_HOST}" pattern="^api\.example\.com$" negate="true" /> 
       </conditions> 
       <action type="Redirect" url="http://www.example.com/{R:1}" /> 
      </rule> 
     </rules> 
    </rewrite> 

ответ

0

У меня есть аналогичная проверка, и у меня есть такое же правило, но указано по-разному в шаблоне.

Мое предложение состоит в том, чтобы включить отслеживание неудачных запросов для проверки перезаписи URL-адресов. http://www.iis.net/learn/extensions/url-rewrite-module/using-failed-request-tracing-to-trace-rewrite-rules

Редактировать: Обновлено правило.

<rewrite> 
      <rules> 
       <rule name="non-root" stopProcessing="true"> 
        <match url="(.*)" /> 
        <conditions logicalGrouping="MatchAll"> 
         <add input="{HTTP_HOST}" pattern="^(www.example.com)$" negate="true" /> 
         <add input="{HTTP_HOST}" pattern="^(api.example.com)$" negate="true" /> 
         <add input="{HTTP_HOST}" pattern="^(example.com)$" /> 
        </conditions> 
        <action type="Redirect" url="http://www.example.com/{R:1}" /> 
       </rule> 
      </rules> 
     </rewrite> 
+0

К сожалению, это не помогло, api.example.com все равно перестает работать, когда я добавляю код в web.config (example.com). Я думаю, что это довольно странно, так как api.example.com - это один сайт в IIS, а example.com - еще один сайт в IIS. Когда я переписываю URL пользователя на одном сайте (example.com), почему это влияет на другой сайт (api.example.com). Они также работают в отдельных пулах приложений. –

+0

Можно ли создать правило, которое перенаправляется только на www.example.com, если вход не начинается с www. или api.? –

+0

Вы добавляете правило Rewrite на уровне WWWROOT \ web.config? У вас есть что-то еще, что может мешать? Я предлагаю попробовать Failed Request Tracing, чтобы просмотреть журнал. Это точно определит, где проблема. – bdoshi

0

На самом деле, не было ничего плохого в моем коде перезаписи. Причина, по которой API перестала работать, состояла в том, что она имела ссылку на верхний домен сайта (example.com), это вызвало конфликт с кодом перезаписи. После изменения ссылки на www -версию doman (www.example.com) все работало нормально.

+0

@ yvind, у вас возник вопрос, вы упомянули, что у вас есть «ссылка» на верхний домен сайта, где была эта ссылка. У меня такая же проблема. Я еще не пробовал ваш код, но вы говорите, что ваш код перезаписи работает? Мне просто интересно, где эта «рефериция» в верхнем домене была на тот случай, если у меня такая же проблема. – Alpdog14

Смежные вопросы