Вопрос по iis-7, url-rewriting, iis, regex – Замена модуля перезаписи URL в IIS7

3

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

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

Итак, это:

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

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

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

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

Вы решили это в конце концов без множества правил? У меня та же проблема, и я ищу решение. jpkeisala
Нет, нет простого способа сделать это. Я пошел с принятым ответом. Stefan

Ваш Ответ

5   ответов
0

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

^(.*) (.*)

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

{R:1}-{R:2}

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

1

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

2

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

6

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

^(.*)%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}
Это почти то же самое, что у меня сейчас (обратите внимание, что 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. Мне понадобится целый набор правил, чтобы справиться со всеми возможными пробелами. Stefan
@jproch отличная идея. Я думаю, что ответ @ JeremyStein в целом является отличным решением неприятной проблемы. Если вы реалистичны в отношении длины ваших URL и их количества%20Если вы, скорее всего, когда-либо это сделаете, вы можете охватить все базы с помощью нескольких простых в применении правил. Тогда вам не нужно идти по пути написания пользовательского обработчика запросов / переписывателя URL, которыйyet another вещь для поддержания.
Вам не понадобится столько правил, если вы начнете обратный отсчет с помощью степеней 2 вместо 1 и разрешите обработку последующих правил. Например, правила, подобные приведенным выше, соответствуют 16 пробелам, затем 8 пробелам, затем 4, затем 2, затем 1. При использовании в таком порядке они будут соответствовать любому количеству пробелов до 31 и вместо этого будут использовать 5 правил из 31 правил
1

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

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

Похожие вопросы