Удалить строку запроса через web.config

На моем веб-сайте у меня возникла ситуация, когда мой URL-адрес иногда получает параметр строки запроса, добавленный внешней системой.

Таким образом, вместо того, чтобы выглядеть так: http://www.domain.com?myquery=blah или http://www.domain.com, он имеет URL-адрес http: http://www.domain.com?myquery=blah&theirpara=blah или http://www.domain.com?theirpara=blah .

Когда пользователь посещает с параметром «их пара», я хотел бы сделать 301 перенаправление на URL-адрес без него.

Я пытался использовать модуль перезаписи URL-адресов, но на самом деле ничего не получалось. Было бы неплохо сделать это на уровне IIS/web.config вместо Response.RedirectPermanent, если это возможно.

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

<!--To always remove trailing slash from the URL-->
<rule name="Remove trailing slash" stopProcessing="true">
  <match url="(.*)/$" />
  <conditions>
    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
  </conditions>
  <action type="Redirect" redirectType="Permanent" url="{R:1}" />
</rule>

Есть идеи, как его настроить?


person Lars Holdgaard    schedule 10.11.2012    source источник
comment
Что не так с их параметром, что вы хотите его удалить?   -  person Uriil    schedule 10.11.2012
comment
Uriil: В целях поисковой оптимизации :) Он индексируется в Google, что приводит к дублированию контента. Это можно исправить с помощью канонических URL-адресов, но мне нужны оба решения.   -  person Lars Holdgaard    schedule 10.11.2012


Ответы (2)


У меня нет IIS, но должно работать следующее:

Изменить совпадение на

<match url="(.*)&theirpara=blah(.*)" />

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

<action type="Redirect" redirectType="Permanent" url="{R:1}{R:2}" />

Если вы хотите, чтобы он работал не только на обычном домене, вы должны удалить условия соответственно.

person Daniel Calliess    schedule 10.11.2012

Если вы ищете довольно общее правило, которое удаляет theirpara, но сохраняет любые другие параметры строки запроса, вам придется обрабатывать случаи, когда

  1. Он один: ?theirpara=123 -> /
  2. Это первый: ?theirpara=123&ourparams=456 -> ?ourparams=456
  3. Он находится посередине: ?our1=123&theirpara=456&our2=789 -> ?our1=123&our2=789
  4. Последнее: ?ourparams=123&theirpara=456 -> ?ourparams=123

Я написал правило, которое обрабатывает эти случаи, но в случае 4 остается амперсанд в конце, я надеюсь, что этого достаточно, чтобы вы начали.

<rule name="Redirect on theirpara" stopProcessing="true">
    <match url="^(.*)$" />
        <conditions>
            <add input="{QUERY_STRING}" pattern="^(.*)theirpara=([^=&amp;]+)&amp;?(.*)$" />
        </conditions>
    <action type="Redirect" url="/{R:0}?{C:1}{C:3}" appendQueryString="false" />
</rule>
person strmstn    schedule 10.11.2012
comment
Я попробовал ваши правила, но они не работают для меня. Когда я пытаюсь проверить шаблон, он показывает ошибку. prntscr.com/nf4wil - person Kalpesh Boghara; 22.04.2019
comment
@КалпешБогхара. Я думаю, что вы не должны использовать в этом диалоге. Просто использовать & должно быть достаточно. - person strmstn; 22.04.2019
comment
Мой шаблон использует ^(.*)irpara=([^=&]+)&?(.*)$, но на сайте есть ? и наконец. пример: example.com? example.com?otherparam=valueofother& - person Kalpesh Boghara; 24.04.2019
comment
Что произойдет, если их para не будет в URL. В моем случае выдается ошибка, не удается получить доступ к URL-адресу веб-сайта без их para - person Kalpesh Boghara; 26.04.2019