Как сделать переписывание URL для URL, чтобы скрыть filename.aspx и querystring? - PullRequest
2 голосов
/ 12 января 2012

https://mysite.com/Admin/Dashboard/DashboardReport.aspx - это мой фактический URL, с которым я хочу скрыть filename.aspx, если есть какие-либо значения строки запроса. как?

также я пробовал FriendlyURL в перезаписи URL в IIS. это не вступает в силу.

Пожалуйста, дайте мне быстрый ответ.

Ответы [ 2 ]

1 голос
/ 11 апреля 2017

Перезапись 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, который сопоставляется с путем для обработки файла, который действительно существует. И имейте в виду, что «перезапись» означает, что он принимает «неправильное» поддельное значение, которое видит пользователь, и переписывает его обратно в уродливое «правильное» значение для сервера. Не наоборот.

1 голос
/ 12 января 2012

Вы хотите использовать правила перезаписи и модуль перезаписи.

http://learn.iis.net/page.aspx/461/creating-rewrite-rules-for-the-url-rewrite-module/

...