Вопрос или проблема
Привет, я настроил правило перезаписи на своем IIS, но, похоже, оно никогда не срабатывает. Я работал над этим в течение нескольких часов без успеха, вот мое правило:
мой URL следующий:
http://localhost:2934/trabajos/3ba2a9e4/some-cool-title
‘
и я хочу сделать перезапись на
http://localhost:2934/snapshots/3ba2a9e4.html
это результат, который я получаю от IIS при тестировании шаблона:
но мне кажется, что правило никогда не срабатывает, на самом деле, я настроил трассировку неудачных запросов, как указано в этом руководстве, и я не получаю никаких ошибок или файлов в папке журналов.
например: C:\inetpub\logs\FailedReqLogFiles
Вместо этого я получаю ошибку 404, и это записано так:
2015-03-28 18:56:11 ::1 GET /trabajos/3ba2a9e4/some-cool-tile - 2934 - ::1 Mozilla/5.0+(Windows+NT+6.3;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+как+Gecko)+Chrome/42.0.2311.60+Safari/537.36 - 404 0 2 4
2015-03-28 18:56:15 ::1 GET /trabajos/3ba2a9e4/some-cool-title - 2934 - ::1 Mozilla/5.0+(Windows+NT+6.3;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+как+Gecko)+Chrome/42.0.2311.60+Safari/537.36 - 404 0 2 2
какие-нибудь идеи?
Вы можете решить эту проблему, следуя этому.
Кроме того:
<system.webServer>
<rewrite>
<rules>
<rule name="1" stopProcessing="true">
<match url="(trabajos)/(3ba2a9e4)/(some-cool-title)" />
<action type="Redirect" url="{HTTP-HOST}/snapshots/{R:2}.html" />
</rule>
</rules>
</rewrite>
</system.webServer>
Ответ или решение
Когда вы сталкиваетесь с проблемой неработающего переписывания URL в IIS 8.5 и получаете ошибку 404, это может быть связано с несколькими факторами. Рассмотрим пошагово, как можно диагностировать и решить эту проблему.
1. Обновление и настройки модуля URL Rewrite
Первым делом убедитесь, что у вас установлен модуль URL Rewrite. Чтобы проверить это, выполните следующие действия:
- Откройте консоль управления IIS и выберите ваш сайт.
- Найдите иконку «URL Rewrite». Если иконка отсутствует, установите модуль через Панель управления.
2. Правильность конфигурации правила
Судя по вашему примеру, вы хотите переписать URL с /trabajos/3ba2a9e4/some-cool-title
на /snapshots/3ba2a9e4.html
. Убедитесь, что ваше правило прописано корректно. Ваше текущее правило:
<system.webServer>
<rewrite>
<rules>
<rule name="1" stopProcessing="true">
<match url="(trabajos)/(3ba2a9e4)/(some-cool-title)" />
<action type="Redirect" url="{HTTP-HOST}/snapshots/{R:2}.html" />
</rule>
</rules>
</rewrite>
</system.webServer>
Однако, существует более корректная версия, которая может решить вашу проблему:
<system.webServer>
<rewrite>
<rules>
<rule name="Rewrite to Snapshot" stopProcessing="true">
<match url="^trabajos/([^/]+)/.*" />
<action type="Rewrite" url="/snapshots/{R:1}.html" />
</rule>
</rules>
</rewrite>
</system.webServer>
Обратите внимание, что здесь используется регулярное выражение ^trabajos/([^/]+)/.*
, что позволяет захватывать любые символы после threeba2a9e4
.
3. Включение журналов для отладки
Чтобы выявить, с чем именно связана проблема, включите трассировку неудачных запросов, как упоминалось в вашем сообщении. Это поможет вам увидеть, почему правило не срабатывает. Включение трассировки можно сделать так:
- Откройте консоль IIS и выберите ваш сайт.
- Включите "Неудачные запросы" в разделе "Управление".
- Убедитесь, что путь к логам правильный:
C:\inetpub\logs\FailedReqLogFiles
.
4. Проверка порядка правил
Проверьте, не перекрывает ли другое правило ваше новое правило. Порядок правил имеет значение, и если другое правило обрабатывает запрос ранее, ваше правило не будет выполнено.
5. Проверка конфигурации путей
Убедитесь, что в конфигурации сайта правильно прописаны пути к статическим и динамическим ресурсам. Если веб-приложение использует другие настройки, такие как обработка URL через другой модуль или инструменты, это также может повлиять на работу правила.
6. Очистка кеша
Иногда изменения могут не применяться из-за кеширования. Попробуйте перезапустить IIS:
iisreset
Заключение
Если после выполнения всех вышеуказанных действий проблема не решена, рекомендуется проверить настройки приложения и другие модули, которые могут конфликтовать с переписыванием URL. Тщательная проверка каждого из этапов, начиная с установки модуля и заканчивая проверкой логов, поможет найти и устранить проблемы, связанные с ошибками 404 при переписывании URL в IIS 8.5.