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.
Ü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 ...
Ich denke das ist richtig.
HINWEIS: Verwenden Sie beim Testen .htaccesskeine 301-Weiterleitungen. Verwenden Sie 302, bis der Test abgeschlossen ist, da der Browser 301s zwischenspeichert. Siehe https://stackoverflow.com/a/9204355/3217306
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.
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.htmlRewriteCond%{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/pageRewriteCond%{THE_REQUEST}^[A-Z]{3,9}\ /.*\.html\ HTTP/RewriteRule^(.*)\.html$ /$1 [R=301,L]
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.
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.
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:
Um die Erweiterung .html aus Ihren URLs zu entfernen, können Sie den folgenden Code in root / htaccess verwenden:
#mode_rerwrite start hereRewriteEngineOn# 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 extensionRewriteRule^(.*)$ $1.html [NC,L]
Antworten:
Ich denke, eine Erklärung von Jons Antwort wäre konstruktiv. Folgende:
Überprüft, ob die Umschreiberegel fortgesetzt wird, wenn die angegebene Datei bzw. das angegebene Verzeichnis nicht vorhanden ist:
Aber was heißt das? Es verwendet Regex (reguläre Ausdrücke) . Hier ist etwas, das ich früher gemacht habe ...
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/3217306Update: Ich habe mich leicht geirrt,
.
stimmt mit allen Zeichen außer Zeilenumbrüchen überein, enthält also Leerzeichen. Auch hier ist eine hilfreiche regex SpickzettelQuellen:
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
quelle
Um die Erweiterung .html aus Ihren URLs zu entfernen, können Sie den folgenden Code in root / htaccess verwenden:
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.
quelle
Mit .htaccess unter Apache können Sie die Umleitung folgendermaßen durchführen:
Wenn Sie .html aus der URL entfernen möchten, verlinken Sie einfach auf die Seite ohne .html
quelle
!-f
Dies sollte für Sie funktionieren:
quelle
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:
quelle
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.
quelle
Ich verwende diese .htacess, um die .html-Erweiterung von meiner URL-Site zu entfernen. Bitte überprüfen Sie, ob dies der richtige Code ist:
quelle
RewriteBase /
bisschen. Leider verstehe ich nicht, warum es funktioniert hat, aber ich denke, ich werde es bald lernen.Für diejenigen, die Firebase-Hosting verwenden, funktioniert keine der Antworten auf dieser Seite. Weil Sie nicht
.htaccess
in Firebase-Hosting verwenden können. Sie müssen die Datei firebase.json konfigurieren. Fügen Sie einfach die Zeile"cleanUrls": true
in Ihre Datei ein und speichern Sie sie. Das ist es.Nach dem Hinzufügen der Zeile wird firebase.json folgendermaßen aussehen:
quelle
Um die Erweiterung .html aus Ihren URLs zu entfernen, können Sie den folgenden Code in root / htaccess verwenden:
Vielen Dank
quelle
Versuchen Sie dies :) Ich weiß nicht, ob es funktioniert.
quelle