IIS7 URL Rewrite Mod вызывает нежелательные эффекты - PullRequest
0 голосов
/ 18 декабря 2009

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

По сути, мы хотим переписать www.oursite.com/Games.aspx?g=classic&m=etc на www.oursite.com/classic/?m=etc

.

Проблема в том, что само правило (по крайней мере, сгенерированное модом URL Rewrite для IIS7) выглядит так:

<rewrite>
      <rules>
        <rule name="RedirectUserFriendlyURL1" stopProcessing="true">
          <match url="^Games\.aspx$" />
          <conditions>
            <add input="{REQUEST_METHOD}" negate="true" pattern="^POST$" />
            <add input="{QUERY_STRING}" pattern="^g=([^=&amp;]+)$" />
          </conditions>
          <action type="Redirect" url="{C:1}" appendQueryString="false" redirectType="Permanent" />
        </rule>
        <rule name="RewriteUserFriendlyURL2" stopProcessing="true">
          <match url="([^/]+)/?$" />
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
          </conditions>
          <action type="Rewrite" url="Games.aspx?g={R:1}" />
        </rule>
      </rules>
    </rewrite>

И, таким образом, любой другой файл, который соответствует аналогичному шаблону, например Item /? Id = 23, переписывается. Кроме того, наш файл ресурсов скрипта переписывается, поэтому весь сайт генерирует 30 ошибок JavaScript. Согласно нашим спецификациям, в наших спецификациях недопустимо указывать URL www.oursite.com/Games/classic ИЛИ www.oursite.com/g/classic. Любое решение? Manythanks!

1 Ответ

2 голосов
/ 18 декабря 2009

Возможно, вместо сопоставления ([^/]+)/?$ во втором правиле, вам лучше явно указать, какие вещи вы хотите переписать, в операторе регулярного выражения OR:

(classic|somethingelse|athirdsomething)/?$

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

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

...