2016-02-01 1 views
1

Мне нужно создать правило перезаписи, которое захватывает все URL-адреса из старой системы магазинов и перенаправляет их в новый магазин. Проблема заключается в следующем:URL-адрес IIS переписывает динамическое число папок

Источник URL из старого магазина может содержать путь, где вы нашли номер продукта, выглядит следующим образом: www.domain.com/folder1/folder2/folder3/[product number].html

folder1, folder2 и folder3 может, но не нужно чтобы быть в названном URL-адресе. Они также не фиксированы (например, folder1 могут быть «автомобилями» или «велосипедами» или «услугами»). Ссылка также может быть just www.domain.com/folder1/[product number].html или даже www.domain.com/[product number] .html иногда.

Для новой системы мне нужен только номер [product number] в целевом URL. Должно выглядеть так: www.domain.com/path1/path2/[product number].aspx

Я ничего не нашел в Google или Stackoverflow, которые помогли мне в этом.

Заранее спасибо

Daniel

+0

Является ли номер продукта всегда числовым? – NikolaiDante

+0

Нет, номер продукта является буквенно-цифровым и может включать в себя - и _ символы – Daniel

+0

Какова связь между папкой1, папкой2 и path1, path2? Являются ли динамические пути тоже? – NikolaiDante

ответ

0

Это должно работать:

<system.webServer> 
    <rewrite> 
     <rules> 
      <rule name="Three deep" stopProcessing="true"> 
       <match url=".*/.*/.*/(.*?).html" /> 
       <action type="Redirect" url="/path1/path2/{R:1}.aspx" /> 
      </rule> 
      <rule name="Two deep" stopProcessing="true"> 
       <match url=".*/.*/(.*?).html" /> 
       <action type="Redirect" url="/path1/path2/{R:1}.aspx" /> 
      </rule> 
      <rule name="One deep" stopProcessing="true"> 
       <match url=".*/(.*?).html" /> 
       <action type="Rewrite" url="/path1/path2/{R:1}.aspx" /> 
      </rule> 
      <rule name="None deep" stopProcessing="true"> 
       <match url="(.*?).html" /> 
       <action type="Rewrite" url="/path1/path2/{R:1}.aspx" /> 
      </rule> 
     </rules> 
    </rewrite> 
</system.webServer> 

Я обеспокоен тем, что выражение - (.*?) - я использую для кода продукта является слишком поймать все , но я не знаю структуру ваших кодов продуктов. Если бы вы могли затянуть его, было бы лучше.

Я также обеспокоен тем, что они ударят по вещам, которые не являются продуктами (например, категория и поиск), поэтому, если есть точка поворота, которую используют все URL-адреса продукта, я бы рекомендовал использовать это. Затягивание бит кода продукта, вероятно, также поможет ложным совпадениям.

В настоящий момент он работает над .html vs .aspx, являющимся битом, который не отправляет его в спираль перенаправления.

Возможно, я смогу сделать это в меньшем количестве правил с лучшим регулярным выражением, которое у меня будет сегодня вечером.

+0

Это прекрасно работает, спасибо за все :) – Daniel

Смежные вопросы