Перезапись URL несколько двусмысленна. Вы переписываете то, что видит пользователь? Или что видит сервер? Лучше полагать, что вы не можете изменить то, что URL отображает для потребителя веб-сайта.
Однако хитрость заключается в том, чтобы отправить их по сломанному, ненастоящему URL-адресу ... затем переписать URL-адрес для ВАС, чтобы вы знали, что означает этот ненастоящий URL-адрес. Например:
Представьте, что у вас есть реальный URL, например:
http://www.example.com/folder/subfolder/page.ext?param=value
Но вы хотите «переписать» URL, чтобы он выглядел так:
http://www.example.com/subfolder/value
Если они находятся на странице page.ext...
, вы не можете изменить то, что они видят в их строке URL. Но вы можете перенаправить их на фальшивый путь /subfolder/value
примерно так:
<rule name="subFolder Value Redirect">
<conditions>
<add input="{REQUEST_URI}" pattern="^/folder/([^/]+)/page\.ext\?param=([^&]+)$" />
</conditions>
<action type="Redirect" url="/{C:1}/{C:2}" />
</rule>
Выше я не делаю "совпадение по URL", потому что я зависел исключительно от Условия. Мое единственное условие - Request_URI выглядит точно так, как я ожидаю. Некоторая папка, некоторое имя подпапки, page.ext и строка запроса с param = SomeValue. Я использую круглые скобки ()
для динамического ввода имени подпапки и значения параметра.
Примечание: {C: 0} означает "0-ую" группу захвата условий. Захват 0 является полным результатом регулярного выражения ^/folder/([^/]+)/page\.ext\?param=([^&]+)$
. Capture 1 - это первая группа захвата, имя подпапки. Capture 2 - это вторая группа Capture, значение параметра.
^
в начале регулярного выражения означает «начиная с начала». Иногда вы не хотите начинать с самого начала, и этого не будет.
$
в конце регулярного выражения означает «окончание в конце». Иногда вы не хотите заканчивать в конце, и этого не будет.
Класс символов [^...]
означает захват любого символа, который не ...
. В этом случае захватывайте все, что не является косой чертой, или все, что не является амперсандом.
Оператор повторения [...]+
Плюс-символ означает захват предыдущего правила хотя бы один раз, но много раз.
.
- это специальный символ, который означает «что угодно». Но мы имеем в виду это как точку расширения page.ext
. Таким образом, вы избегаете его как \.
{REQUEST_URI}
означает сравнение вашего шаблона со всем URL-адресом после домена / порта. Таким образом, в URL-адресе http://www.example.com:1234/subfolder...
подпапка / и все последующее содержимое находятся в {REQUEST_URI} EXCEPT маршрутизации хэштега. Поэтому, если у вас есть Якорный или Angular UI Route, они остаются только в браузере и всегда будут в конце любого перенаправления, но сервер никогда их не увидит, поэтому вы не сможете разобрать хэштеги.
action type="Redirect"
означает, что это действие перенаправляет пользователя на указанный URL.
url="/{C:1}/{C:2}"
- это URL относительно домена, так как он не начинается с протокола. Это перенаправит на / subFolder / value, потому что захват условий 1 и захват условий 2 в нашем шаблоне захватывают эти два значения.
После вставки этого правила пользователь будет перенаправлен на сломанный набранный URL, который выглядит как URL-адрес представителя государства (RESTful). Yaay !!
перезапись URL
Перезапись для вас (сервера), а не для клиента. Но теперь, когда они перенаправлены на красивый, довольно неработающий URL, вы можете найти контекст этого URL и сообщить своему серверу, что он ДЕЙСТВИТЕЛЬНО значит, переписав его для сервера.
<rule name="subFolder Value Rewrite">
<conditions><add input="{REQUEST_URI}" pattern="^/([^/]+)/([a-zA-Z0-9]+)$" /></conditions>
<action type="Rewrite" url="/folder/{C:1}/page.ext?param={C:2}" />
</rule>
Это в значительной степени обратное предыдущему правилу. Это находит шаблон, в котором есть путь, имя «subFolder», косая черта и значение, состоящее из букв и цифр. Это также, опять же, описывает начало ^
и конец $
, потому что мы не ожидаем неожиданных странных вещей. Таким образом, это будет ловить URL-адрес, как:
http://www.example.com/subFolder/1234abcDE
но не поймают
http://www.example.com/lol/somethingelse/15?blah=kthx
URL перезаписи затем оценивается как реальный реальный URL, который сопоставляется с путем для обработки файла, который действительно существует. И имейте в виду, что «перезапись» означает, что он принимает «неправильное» поддельное значение, которое видит пользователь, и переписывает его обратно в уродливое «правильное» значение для сервера. Не наоборот.