Entfernen Sie die HTML-Erweiterung mit der Webkonfiguration dauerhaft

Lesezeit: 4 Minuten

Benutzer-Avatar
Zack

Ich versuche, die HTML-Erweiterung von Seiten mit web.config zu entfernen. Unten ist der Code, den ich in der Datei web.config verwende

<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>

Es funktioniert gut und entfernt die HTML-Erweiterung, aber es scheint hier zwei Probleme zu geben:

  1. Wenn ich ‘slash’ setze, funktioniert es nicht und gibt mir nicht gefundene Fehler. Zum Beispiel: http://example.com/my-page/ jetzt wird es nicht funktionieren, aber ich habe http://example.com/my-page dann wird es gut funktionieren, also möchte ich, dass beide arbeiten

  2. Anderes Problem ist das .html Seiten werden noch geöffnet. Wenn ich zum Beispiel die Seite als öffne http://example.com/my-page.html Es funktioniert auch, aber ich möchte es konvertieren http://example.com/my-page automatisch, ich weiß, dass ich dafür 301-Weiterleitungen verwenden kann, aber das wird nicht funktionieren, da es hier viele Dateien gibt, also muss ich unterschiedliche 301-Regeln für verschiedene URLs verwenden.

Bitte um Rat.

Vielen Dank

Benutzer-Avatar
besser

URLRewrite 2.0-Regel (diesen Teil einfügen system.webServer Knoten), der ersetzt .html von 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>

  • perfekt.. viel Zeit gespart

    – Dalvir Singh

    10. Juli 2019 um 4:55 Uhr

  • Wenn Sie dies pro Website tun möchten, können Sie dies einfach in web.config im Stammverzeichnis des virtuellen Verzeichnisses einfügen. Ich werde auch eine vollständige Antwort hinzufügen …

    – Jon R

    21. Juni 2020 um 16:53 Uhr

Benutzer-Avatar
Jon R

Wenn Sie dies auf Websitebasis mit dem lokalen IIS-Server unter Windows 10 tun möchten, installieren Sie das URL-Rewrite-Modul und fügen Sie es dann in web.config im Stammverzeichnis Ihres virtuellen Verzeichnisses ein:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <remove name="Redirecting .html ext" />
                <remove name="Hide .html ext" />
                <rule name="Hide .html ext" enabled="true">
                    <match url="^(.*)" ignoreCase="true" />
                    <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>
                    <serverVariables />
                    <action type="Rewrite" url="{R:0}.html" />
                </rule>
                <rule name="Redirecting .html ext" enabled="true" stopProcessing="true">
                    <match url="^(.*).html" />
                    <conditions logicalGrouping="MatchAny">
                        <add input="{URL}" pattern="^(.*)\.html$" />
                    </conditions>
                    <serverVariables />
                    <action type="Redirect" url="{R:1}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

  • Ich aktualisiere meine Antwort hier mit einem besseren RegEx für die Umleitungsregel, sodass sie nur mit Dateien übereinstimmt, die mit html enden, und nicht mit (ähm) Dingen wie CSS-Dateien mit html im Titel …

    – Jon R

    3. Juli 2020 um 23:31 Uhr

Ich weiß, das ist fast ein Jahr später, aber ich werde es versuchen. Ich bin mir nicht sicher, ob ich Ihr Problem richtig verstehe, aber wenn ich es tue, benutze ich einfach

    <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>

Dann die restlichen Schlussanweisungen, die Sie verwenden.

1005630cookie-checkEntfernen Sie die HTML-Erweiterung mit der Webkonfiguration dauerhaft

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy