У меня есть сайт PHP, работающий на IIS7, и мне нужно добавить некоторую перезапись URL-адресов, но пока, похоже, мое правило игнорируется. Вот правило:
<rewrite>
<rules>
<rule name="VCard" stopProcessing="true">
<match url="\?user=(.*)$" />
<action type="Rewrite" url="http://www.otherserver.com/vcard.aspx?user={R:1}" redirectType="Permanent" appendQueryString="false" logRewrittenUrl="true" />
</rule>
</rules>
</rewrite>
При использовании пользовательского интерфейса для тестирования моего регулярного выражения он говорит, что http://www.myserver.com/?user=123456 соответствует правилу, и что R: 1 - «123456». Но когда я пытаюсь получить доступ к фактическому URL-адресу, похоже, что он не работает.
Ведение журнала не кажется слишком полезным:
2010-10-26 14:22:07 XXX.XXX.XXX.XXX GET / user=12345 80 - XXX.XXX.XXX.XXX Mozilla/5.0 (Windows;+U;+Windows+NT+6.1;+en-US)+AppleWebKit/534.10 (KHTML,+like+Gecko)+Chrome/8.0.552.11+Safari/534.10 200 0 0 187
Как я уже упоминал выше, сам сайт находится на PHP (который я менее знаком с хостингом на IIS). Может ли это мешать запуску модуля перезаписи? Я где-то упускаю важный шаг?
Соответствие URL-адреса соответствует только URL-адресу перед строкой запроса, например folder / vcard.aspx.
Вероятно, это условие для {QUERY_STRING}, которое вам нужно вместо этого. Установите. * Для URL-адреса, если хотите все поймать. Просто будьте осторожны, чтобы не зациклиться на этом запросе.
Это может быть полезно: http://weblogs.asp.net/owscott/archive/2010/04/20/url-parts-available-to-url-rewrite-rules.aspx
Неважно, что это PHP. Перенаправление происходит до обработки PHP.