Замена модуля перезаписи URL в IIS7

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

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

Итак, это:

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

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

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

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

 jpkeisala08 июл. 2014 г., 08:08
Вы решили это в конце концов без множества правил? У меня та же проблема, и я ищу решение.
 Stefan09 июл. 2014 г., 21:37
Нет, нет простого способа сделать это. Я пошел с принятым ответом.

Ответы на вопрос(5)

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

^(.*) (.*)

Перенаправить на

{R:1}-{R:2}

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

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

как легко переписать 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 великолепен, но только потому, что у вас есть молоток ...

Решение Вопроса

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

^(.*)%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}
 Stefan29 июн. 2009 г., 19:34
Это почти то же самое, что у меня сейчас (обратите внимание, что IIS Rewrite интерпретирует% 20 как пробел): Pattern: (\ w +) \ s + (\ w +) \ s + (\ w +) \ s + (\ w +. aspx) URL-адрес перенаправления: {R: 1} - {R: 2} - {R: 3} - {R: 4} работает довольно хорошо, но у меня также есть пути, такие как около% 20Us / Blah% 20Dah.aspx. Мне понадобится целый набор правил, чтобы справиться со всеми возможными пробелами.
 12 дек. 2017 г., 16:02
@jproch отличная идея. Я думаю, что ответ @ JeremyStein в целом является отличным решением неприятной проблемы. Если вы реалистичны в отношении длины ваших URL и их количества%20Если вы, скорее всего, когда-либо это сделаете, вы можете охватить все базы с помощью нескольких простых в применении правил. Тогда вам не нужно идти по пути написания пользовательского обработчика запросов / переписывателя URL, которыйyet another вещь для поддержания.
 29 сент. 2017 г., 17:23
Вам не понадобится столько правил, если вы начнете обратный отсчет с помощью степеней 2 вместо 1 и разрешите обработку последующих правил. Например, правила, подобные приведенным выше, соответствуют 16 пробелам, затем 8 пробелам, затем 4, затем 2, затем 1. При использовании в таком порядке они будут соответствовать любому количеству пробелов до 31 и вместо этого будут использовать 5 правил из 31 правил

иHelicon Ape для любого числа% 20:

RewriteBase /
RewriteRule ^(.*)%20(.*)$ $1-$2 [LP,R=301,L]

Ваш ответ на вопрос