(Я отправил этот вопрос на StackOverflow потому что поиски ответа показали связанные вопросы на StackOverflow, на которые были получены ответы и множество положительных отзывов. Но мой вопрос до сих пор получил отрицательное голосование и закрытое голосование "не по теме", поэтому я пытаюсь спросить здесь, где он может считаться более актуальным.)
Я хотел бы перезаписать URL-адрес (или, если нужно, перенаправить, например в этом ответе на вопрос), за исключением того, что я хотел бы переписывать / перенаправлять только в том случае, если запрошенный URL-адрес является только корнем сайта (без файлов или подкаталогов и без строк запроса).
т.е. мне нужны только запросы на TheSite.net переписать / перенаправить на TheSite.net/home.htm, но запросы на TheSite.net/FAQ.htm или TheSite.net/sub или TheSite.net/?parameter=yep не переписываться / не перенаправляться.
Я получил перезаписи и перенаправления для работы, например:
<system.webServer>
<rewrite>
<rules>
<clear />
<rule name="Rewrite home page to Home.htm" stopProcessing="true">
<match url="^" />
<action type="Rewrite" url="/Home.htm" />
</rule>
</rules>
</rewrite>
</system.webServer>
Я тоже пробовал <match url="^$" />
и <match url="TheSite.net" />
, но они, естественно, тоже переписывают TheSite.net/?parameter=yep, а мне нужно, чтобы этого не было. Возможно, если есть еще один атрибут <match>
что позволяет мне сопоставить пустую строку запроса, но нет, если есть строка запроса (или не соответствует, если есть что-то после косой черты)?
Я надеюсь, что подходящее правило может делать то, что я хочу, но мои навыки синтаксиса RegEx не подходят для этой задачи, и я не нашел примера чего-то достаточно близкого.
На этом сайте я вижу Параметры строки запроса модуля перезаписи URL-адресов IIS похоже, что это может быть что-то вроде того, что могло бы сработать, хотя я хочу противоположное - перезаписывать только в том случае, если после имени домена в URL-адресе нет строки запроса или другого контента.
Хорошо, при условии полного тестирования странных случаев, я, кажется, нашел решение, играя с Условиями, а именно:
<rule name="Rewrite home page to Home.htm" stopProcessing="true">
<match url="^$" />
<conditions>
<add input="{QUERY_STRING}" pattern=".+=(.+)" negate="true" />
</conditions>
<action type="Rewrite" url="/Home.htm" />
</rule>