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.