Замена модуля перезаписи URL в IIS7 - PullRequest
3 голосов
/ 29 июня 2009

Мне очень нравится модуль перезаписи URL IIS7, и пока он отлично работает для меня.

Есть одна вещь, которую я не знаю, как это сделать: я бы хотел перенаправить все URL-адреса, в которых есть кодированные пробелы (% 20), на URL-адрес, в котором пробелы заменены на тире (-).

Итак, это:

http://www.test.com/About%20Our%20Mission.aspx

следует перенаправить на это:

http://www.test.com/About-Our-Mission.aspx

Это возможно даже с помощью регулярных выражений?

Ответы [ 5 ]

6 голосов
/ 29 июня 2009

Нет способа сделать то, что вы хотите напрямую.

Вы можете согласиться на что-то вроде этого:

^(.*)%20(.*)%20(.*)%20(.*)  replaced by:  {R:1}-{R:2}-{R:3}-{R:4}
^(.*)%20(.*)%20(.*)         replaced by:  {R:1}-{R:2}-{R:3}
^(.*)%20(.*)                replaced by:  {R:1}-{R:2}
2 голосов
/ 09 июля 2009

Одной из приятных вещей в .aspx является то, как легко переписать URL с реальным кодом. Просто добавьте немного поиска и замените код в файле Global.asax вашего сайта:

protected void Application_BeginRequest(object sender, EventArgs e)
{
    string path = HttpContext.Current.Request.Path;
    // Search and replace, RegEx, etc.
    HttpContext.Current.RewritePath(path);
}

В IIS7 необходимо добавить несколько записей в web.config для обработки перезаписи не .aspx URL:

<system.webServer>
    <handlers>
        <clear/>
        <add name="Brands1" path="Brands/*.html" verb="*" type="ASP.global_asax" resourceType="Unspecified"/>
        <add name="Brands2" path="Brands/\?*.html" verb="*" type="ASP.global_asax" resourceType="Unspecified"/>
        <!-- ... -->

Модуль перезаписи URL IIS7 великолепен, но только потому, что у вас есть молоток ...

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

Вы можете написать Custom Rewrite Provider, чтобы выполнять любые манипуляции с исходным URL. Но это включает в себя не только регулярное выражение. Подробнее здесь .

1 голос
/ 09 июля 2009

То же самое может быть достигнуто в одном правиле с ISAPI_Rewrite 3 или Helicon Ape для любого числа% 20:

RewriteBase /
RewriteRule ^(.*)%20(.*)$ $1-$2 [LP,R=301,L]
0 голосов
/ 17 мая 2018

Возможно, я злюсь, но это, кажется, работает ...

Используйте правило URL_Rewrite, используя регулярные выражения с этим шаблоном:

^(.*) (.*)

Перенаправление на

{R:1}-{R:2}

Я проверил это с одним пробелом или множеством пробелов, и он отлично работает для меня с использованием IIS 10. Обратите внимание, что он работает так же хорошо для %20, как и для "" в строке URL, веселит.

...