Удалить расширение HTML с web config навсегда

Я пытаюсь удалить расширение html со страниц с помощью web.конфиг. Ниже приведен код, который я использую в интернете.файл config

<rewrite>
  <rules>
    <rule name="rewrite html">
      <match url="(.*)$" />
      <conditions logicalGrouping="MatchAll">
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
        <add input="{REQUEST_FILENAME}" negate="true" pattern="(.*).html" />
      </conditions>
      <action type="Rewrite" url="{R:1}.html" />
    </rule> 
  </rules>
</rewrite>

он работает нормально и удаляет расширение html, однако здесь, похоже, есть 2 проблемы:

  1. когда я ставлю "Слэш", он не работает и дает мне не найденные ошибки. Например: http://example.com/my-page/ теперь это не сработает, но я поставил http://example.com/my-page тогда он будет работать нормально, поэтому я хотел бы, чтобы они оба работа

  2. другая проблема в том, что .html страницы все еще открываются. Например, если я открою страницу как http://example.com/my-page.html Он также работает, но я хочу его преобразовать в http://example.com/my-page автоматически, я знаю, что могу использовать 301 перенаправление для этого, но это не будет работать, так как здесь много файлов, поэтому я должен использовать разные правила 301 для разных URL.

Пожалуйста, Советом.

спасибо

2 ответов


правило URLRewrite 2.0 (вставьте эту часть внутрь system.webServer узел), который заменяет .html из url:

<rewrite>
    <rules>
        <rule name="Hide .html ext">
            <match ignoreCase="true" url="^(.*)"/>
            <conditions>
                <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
                <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
                <add input="{REQUEST_FILENAME}.html" matchType="IsFile"/>
            </conditions>
            <action type="Rewrite" url="{R:0}.html"/>
        </rule>
        <rule name="Redirecting .html ext" stopProcessing="true">
            <match url="^(.*).html"/>
            <conditions logicalGrouping="MatchAny">
                <add input="{URL}" pattern="(.*).html"/>
            </conditions>
            <action type="Redirect" url="{R:1}"/>
        </rule>
    </rules>
</rewrite>

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

    <system.webServer>
     <caching>
      <profiles>
       <remove extension=".php" />
       <remove extension=".html" />
       <add extension=".html" policy="CacheUntilChange" kernelCachePolicy="CacheUntilChange" duration="23:59:59" varyByQueryString="*" />
       <add extension=".php" policy="CacheUntilChange" kernelCachePolicy="CacheUntilChange" duration="00:00:30" varyByQueryString="*" />
             </profiles>
             </caching>
             <directoryBrowse enabled="false" />
             <defaultDocument>

затем остальные заключительные операторы, которые вы используете.