Премахнете querystring чрез 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.

Когато потребител посети с параметъра "theirpara", бих искал да направя пренасочване 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
@KalpeshBoghara. Мисля, че не трябва да използвате в този диалог. Само използването на & трябва да е достатъчно. - person strmstn; 22.04.2019
comment
Моят шаблон ни ^(.*)theirpara=([^=&]+)&?(.*)$, но уебсайтът съдържа? и & накрая. напр.: example.com? example.com?otherparam=valueofother& - person Kalpesh Boghara; 24.04.2019
comment
Какво се случва, ако theirpara не е в URL. В моя случай извежда грешка, не мога да осъществя достъп до URL адреса на уебсайта без theirpara - person Kalpesh Boghara; 26.04.2019