Wie entferne ich .html von der URL?


112

Wie entferne ich .htmlvon der URL einer statischen Seite?

Außerdem muss ich jede URL mit .htmlzu der ohne umleiten . (dh www.example.com/page.htmlzu www.example.com/page).


1
Mit ".html entfernen" meinen Sie "keine .html muss vorhanden sein"?
Leichtigkeitsrennen im Orbit

@Tomalak: Ja und auch URLs mit ".html" an diejenigen ohne weiterleiten. Mein Problem ist, dass dies zu einer unendlichen Umleitung führt. Mein aktuelles Setup ermöglicht den Zugriff auf www.example.com/page.html und www.example.com/page, was nicht SEO-freundlich ist.
Dave


@Tomalak: Danke für die Tipps. Das Lesen der Dokumentation von mod_rewrite war sehr hilfreich.
Dave

Antworten:


105

Ich denke, eine Erklärung von Jons Antwort wäre konstruktiv. Folgende:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

Überprüft, ob die Umschreiberegel fortgesetzt wird, wenn die angegebene Datei bzw. das angegebene Verzeichnis nicht vorhanden ist:

RewriteRule ^(.*)\.html$ /$1 [L,R=301]

Aber was heißt das? Es verwendet Regex (reguläre Ausdrücke) . Hier ist etwas, das ich früher gemacht habe ... Geben Sie hier die Bildbeschreibung ein

Ich denke das ist richtig.

HINWEIS: Verwenden Sie beim Testen .htaccess keine 301-Weiterleitungen. Verwenden Sie 302, bis der Test abgeschlossen ist, da der Browser 301s zwischenspeichert. Siehe https://stackoverflow.com/a/9204355/3217306

Update: Ich habe mich leicht geirrt, .stimmt mit allen Zeichen außer Zeilenumbrüchen überein, enthält also Leerzeichen. Auch hier ist eine hilfreiche regex Spickzettel

Quellen:

http://community.sitepoint.com/t/what-does-this-mean-rewritecond-request-filename-fd/2034/2

https://mediatemple.net/community/products/dv/204643270/using-htaccess-rewrite-rules


6
Hervorragendes Diagramm zur Erklärung der Antwort.
Ric

Der Tipp zu den 301s und zum Browser-Cache hat meine Probleme gelöst.
bgfvdu3w

@ KnocksX Ich bin kein Webmaster mehr und bin nicht in der Lage zu helfen
binaryfunt

84

Um die Erweiterung .html aus Ihren URLs zu entfernen, können Sie den folgenden Code in root / htaccess verwenden:

RewriteEngine on


RewriteCond %{THE_REQUEST} /([^.]+)\.html [NC]
RewriteRule ^ /%1 [NC,L,R]

RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_URI}.html [NC,L]

HINWEIS: Wenn Sie eine andere Erweiterung entfernen möchten, z. B. um die .php-Erweiterung zu entfernen, ersetzen Sie einfach den HTML- Code überall durch PHP im obigen Code.


10
Keine der anderen Antworten hat bei mir funktioniert, aber diese hat funktioniert, vielen Dank!
Emmet Arries

2
Dieser hat auch für mich gearbeitet. Danke @starkeen. Habe eine Stimme.
JeremyS

2
Hat einwandfrei funktioniert. Danke dir!
Ixany

Dieser entfernt die Dateierweiterung für mich, leitet sie jedoch nicht zu dieser Seite weiter
Bhargav Venkatesh

74

Mit .htaccess unter Apache können Sie die Umleitung folgendermaßen durchführen:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ /$1 [L,R=301] 

Wenn Sie .html aus der URL entfernen möchten, verlinken Sie einfach auf die Seite ohne .html

<a href="http://www.example.com/page">page</a>

23
Das tut nichts für mich. Gibt es einen Grund, warum es nicht funktionieren würde?
Michael Yaworski

Haben Sie eine aktuelle Datei für den angeforderten Link? Das würde den!-f
Martijn

72

Dies sollte für Sie funktionieren:

#example.com/page will display the contents of example.com/page.html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+)$ $1.html [L,QSA]

#301 from example.com/page.html to example.com/page
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.html\ HTTP/
RewriteRule ^(.*)\.html$ /$1 [R=301,L]

3
Ich habe in Godaddy eine 404 mit diesem Code bekommen und das Problem behoben: Optionen + FollowSymLinks -MultiViews -Indexe ganz oben.
Labanino

1
Ich denke, das ist die beste und vollständigste Antwort, danke!
Ctekk

Ich habe versucht, dies in localhost zu tun, aber es funktioniert nicht. Muss ich noch etwas tun, muss ich die .htaccess-Datei verknüpfen oder wie erkennt die Seite sie?
Pianistprogrammer

Wie füge ich # 301 die Erweiterung .php von example.com/page.html zu example.com/page hinzu? Ist das möglich?

20

Sie müssen sicherstellen, dass Sie auch haben Options -MultiViews.

Keiner der oben genannten Punkte funktionierte für mich auf einem Standard-cPanel-Host.

Das hat funktioniert:

Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]

Von allen Antworten oben hat diese endlich funktioniert. Ich glaube, weil meine Seite auf Godaddy mit cPanel gehostet wird. Der Schlüssel ist Options -MultiViews
Brad Vanderbush

Ja, nichts in diesem Abschnitt funktioniert erwartet diese Antwort! Du hast den Tag gerettet!
Neil Bannet

Danke Kumpel. Ich bin mir nicht sicher, warum die anderen nicht wie erwartet geklappt haben.
Nanoo

13

Vielen Dank für Ihre Antworten. Ich habe mein Problem bereits gelöst. Angenommen, ich habe meine Seiten unter http://www.yoursite.com/html . Es gelten die folgenden .htaccess- Regeln.

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /html/(.*).html\ HTTP/
   RewriteRule .* http://localhost/html/%1 [R=301,L]

   RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /html/(.*)\ HTTP/
   RewriteRule .* %1.html [L]
</IfModule>

6

Ich verwende diese .htacess, um die .html-Erweiterung von meiner URL-Site zu entfernen. Bitte überprüfen Sie, ob dies der richtige Code ist:

    RewriteEngine on
RewriteBase /
RewriteCond %{http://www.proofers.co.uk/new} !(\.[^./]+)$
RewriteCond %{REQUEST_fileNAME} !-d
RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule (.*) /$1.html [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^.]+)\.html\ HTTP
RewriteRule ^([^.]+)\.html$ http://www.proofers.co.uk/new/$1 [R=301,L]

Dies schien für mich im Gegensatz zu den anderen hier vorgestellten Lösungen zu funktionieren, danke. Ich möchte jedoch hinzufügen, dass Sie die Links in Ihrem HTML-Code noch aktualisieren müssen. Wenn Sie also ursprünglich als <a href="page1.html"> </a> auf Ihre HTML-Datei verlinken, sollten Sie diese aktualisieren es als <a href=" example.com/page1"> </ a > und dann wird es funktionieren.)
Lorenzo

Die Kernveränderung für mich war das RewriteBase /bisschen. Leider verstehe ich nicht, warum es funktioniert hat, aber ich denke, ich werde es bald lernen.
Keno Clayton

4

Für diejenigen, die Firebase-Hosting verwenden, funktioniert keine der Antworten auf dieser Seite. Weil Sie nicht .htaccessin Firebase-Hosting verwenden können. Sie müssen die Datei firebase.json konfigurieren. Fügen Sie einfach die Zeile "cleanUrls": truein Ihre Datei ein und speichern Sie sie. Das ist es.

Nach dem Hinzufügen der Zeile wird firebase.json folgendermaßen aussehen:

{
  "hosting": {
    "public": "public",
    "cleanUrls": true, 
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ]
  }
}

2

Um die Erweiterung .html aus Ihren URLs zu entfernen, können Sie den folgenden Code in root / htaccess verwenden:

#mode_rerwrite start here

RewriteEngine On

# does not apply to existing directores, meaning that if the folder exists on server then don't change anything and don't run the rule.

RewriteCond %{REQUEST_FILENAME} !-d

#Check for file in directory with .html extension 

RewriteCond %{REQUEST_FILENAME}\.html !-f

#Here we actually show the page that has .html extension

RewriteRule ^(.*)$ $1.html [NC,L]

Vielen Dank


-1
RewriteRule /(.+)(\.html)$ /$1 [R=301,L] 

Versuchen Sie dies :) Ich weiß nicht, ob es funktioniert.


4
Sie sollten es nicht als Antwort veröffentlichen, wenn Sie nicht sicher sind, ob es funktioniert oder nicht.
Ist es wichtig,
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.