Исключить каталог в перезаписи URL - PullRequest
1 голос
/ 04 сентября 2011

У меня есть этот код на моем web.config

<rule name="Imported Rule 2" stopProcessing="true">
  <match url="^(.*)$" ignoreCase="false" />
  <conditions>
    <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
  </conditions>
  <action type="Rewrite" url="default.asp?q={R:1}" appendQueryString="true" />
</rule>

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

Ответы [ 2 ]

14 голосов
/ 05 сентября 2011

Чтобы исключить обработку определенных папок (/contact/, /presentation/, /db/site/ - что-либо в этих папках) по этому правилу, вы можете добавить еще одно условие, например:

<rule name="Imported Rule 2" stopProcessing="true">
    <match url="^(.*)$" ignoreCase="false" />
    <conditions>
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
        <add input="{REQUEST_URI}" pattern="^/(contact|presentation|db/site)" negate="true" />
    </conditions>
    <action type="Rewrite" url="default.asp?q={R:1}" appendQueryString="true" />
</rule>

Это хорошо делать через дополнительное условие, потому что легко прочитать / понять, о чем это правило.


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

<rule name="Imported Rule 2" stopProcessing="true">
    <match url="^(?!(?:contact|presentation|db/site)/)(.*)$" ignoreCase="false" />
    <conditions>
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
    </conditions>
    <action type="Rewrite" url="default.asp?q={R:1}" appendQueryString="true" />
</rule>
1 голос
/ 02 января 2012

Так я получил директорию блога для работы с воспламенителем кода в root и wordpress в / blog /

В папке блога также есть оригинальный файл web.config, который является вторым правилом этого файла ...

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
     <rewrite>
        <rules>        
            <rule name="wordpress - Rule 1" stopProcessing="true">
                <match url="^blog" ignoreCase="false"/>
                <conditions>
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
                </conditions>
                <action type="Rewrite" url="/blog/index.php"/>
            </rule>
            <rule name="app" patternSyntax="Wildcard">
                <match url="*"/>
                    <conditions>
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
                </conditions>
                <action type="Rewrite" url="index.php"/>
            </rule>
    </rules>
</rewrite>

...