Я знаю, что этому вопросу уже почти 4 года, так что вы, вероятно, давно уже не нуждаетесь в ответе.
^
должно работать, хотя:
<rule name="PageRedirection" enabled="true" stopProcessing="true">
<match url="^urlfolder/filename.aspx" />
<action type="Redirect" url="urlfolder/newfile.aspx" redirectType="Permanent" />
</rule>
^
указывает начало строки пути, поэтому все, что вы ставите после ^
, будет соответствовать только тому, что появляется сразу после корня сайта и косой черты.
например,
www.example.com / urlfolder / filename.aspx
будет соответствовать.
www.example.com / подкаталог / urlfolder / filename.aspx
НЕ будет соответствовать.
Единственная причина, по которой я могу подумать, почему он будет соответствовать /subdirectory/urlfolder/filename.aspx, как вы говорите, состоит в том, что в вашем подкаталоге / есть копия вашего web.config, и в этом случае www.example.com/subdirectory/
рассматривается как корневой.
Если это так, и ваш web.config копируется в места, отличные от вашего корневого каталога, другой вариант - добавить правило в %windir%\system32\inetsrv\config\ApplicationHost.config
вместо web.config.Это файл, который содержит все параметры, которые применяются ко всем IIS на вашем компьютере, а не только к определенному сайту.По моему опыту, Visual Studio откажется открывать этот файл.Однако вы можете отредактировать файл в другом редакторе или установить правила перезаписи через графический интерфейс IIS.
В графическом интерфейсе на верхнем уровне дерева файлов инструменты, доступные на этом уровне, включают утилиту перезаписи URL, и установленные там правила пишут в ApplicationHost.config.
Надеюсь, это поможет