3 Stimmen

Umschreiben von URLs in IIS7

Ich habe verfolgt http://learn.iis.net/page.aspx/806/seo-rule-templates/ die eine nahezu perfekte Anleitung zur Erstellung SEO-freundlicher URLs in IIS7 ist.

Ich habe allerdings ein Problem:

Wenn ich eine Regel zum Umschreiben von www.domain.com/contact/ Ich erhalte in web.config:

<rule name="RewriteUserFriendlyURL1" 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="?p={R:1}" />
</rule>

Aber dann kann ich nicht tun www.domain.com/contact/send/ .

Wenn ich eine Regel zum Umschreiben von www.domain.com/contact/send/ Ich erhalte in web.config:

<rule name="RewriteUserFriendlyURL1" 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="?p={R:1}&amp;a={R:2}" />
</rule>

Aber dann kann ich nicht tun www.domain.com/contact/

Beide Regeln bewirken, dass ich keine Skripte, Css oder Bilder von meinem Server sehen kann. /scripts/ , /css/ y /images/ Mappen.

Wie erstelle ich eine Regel, die auf beide und NICHT auf die 3 oben genannten Ordner zutrifft?

3voto

Efran Cobisi Punkte 5122

Ihre Regel könnte etwa so aussehen (ich habe sie zum besseren Verständnis und zur eventuellen Bearbeitung erweitert und kommentiert):

^
    (
        (?!css|scripts|images)  # The directories you don't want to match
        [^/]+                   # The matched directory
    )
    (
        /
        (
            ([^/]+)             # Optional part
            /?                  # Optional trailing slash
        )?
    )?
$

Daraus ergibt sich Folgendes:

<match url="^((?!css|scripts|images)[^/]+)(/(([^/]+)/?)?)?$" />

Die Rewrite-Url sollte dann auf aktualisiert werden: ?p={R:1}&amp;a={R:4} wegen der Änderungen in der Anzahl der Captures des neuen regulären Ausdrucks.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X