У меня есть несколько страниц на моем сайте с длинными и нечитаемыми URL-адресами, которые я бы хотел сократить. Проблема, с которой я столкнулся, заключается в добавлении строк запроса со значениями переменных.
Например: «www.example.com/dir1/dir2/filename.php» сокращается до «www.example.com/file». «www.example.com/dir1/dir2/filename.php?id=2» будет «www.example.com/file/2». «www.example.com/dir1/dir2/filename.php?id=2&alt=6» будет «www.example.com/file/2/6».
Значения id и alt затем используются нашей страницей для доступа к информации в нашей базе данных, которая определяет содержимое страницы. Эти значения могут меняться, и нет установленной суммы.
Прямо сейчас у меня есть первый пример, нормально работающий со следующими правилами перезаписи:
<rewrite>
<outboundRules>
<remove name="OutboundRewriteUserFriendlyURL1" />
</outboundRules>
<rewriteMaps>
<rewriteMap name="StaticRewrites">
<add key="/file" value="/dir1/dir2/filename.php" />
</rewriteMap>
</rewriteMaps>
<rules>
<rule name="Rewrite Rule">
<match url=".*" />
<conditions>
<add input="{StaticRewrites:{REQUEST_URI}}" pattern="(.+)" />
</conditions>
<action type="Rewrite" url="{C:1}" />
</rule>
</rules>
</rewrite>
Но мне не удалось найти ничего, что позволило бы URL-адресам содержать переменные. Во всем, что я видел, использовались статические перезаписи, как в моем текущем решении, и я не могу найти ничего о разрешении произвольных параметров.
РЕДАКТИРОВАТЬ:
Нашел лучшее решение, которое не использует карту перезаписи. Раньше я пробовал использовать похожее правило, но из-за настройки IIS в нашей тестовой среде оно работало не так, как ожидалось. Эта версия должна работать для большинства людей.
<rule name="Curricula View" stopProcessing="true">
<match url="/file(?:/(\d+)(?:/(\d+))?)?" />
<action type="Rewrite" url="/dir1/dir2/filename.php?id={R:1}&alt={R:2}" appendQueryString="true" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
</rule>