Entfernen Sie „.html“ aus der URL über .htaccess für eine WordPress-Website

Lesezeit: 6 Minuten

Benutzer-Avatar
z0min

Hintergrundinformation:

Ich habe stackoverflow nach einer bestimmten Lösung durchsucht und konnte keine finden, die meine Situation behoben hat. Vielen Dank im Voraus für jede Hilfe, die Sie anbieten können. Ihr Wissen wird geschätzt.

Ich habe mich entschieden, einen Vertrag zur „Umwandlung“ (in den Worten des Kunden) einer Joomla-Site in eine WordPress-Site anzunehmen. Alles läuft reibungslos, außer dass die Joomla-Site auf .html-Dateien verweist, sowohl in ihrer Navigation als auch im Inhalt von über 100 Beiträgen.

Anstatt jeden Beitrag einzeln durchzugehen und die Links zu aktualisieren oder einen SQL-Befehl auszuführen, um „.html“ aus URLs zu entfernen, habe ich mich entschieden, Druck auf .htaccess auszuüben, mit dem ich einigermaßen zufrieden bin.


Was ich versuche zu tun ↓

In WordPress habe ich benutzerdefinierte Permalinks aktiviert und es lautet wie folgt: /%category%/%postname%

Hier ist ein Beispiel dafür, was einer der alt URLs in den Posts sehen so aus:

http://the-site.com/category/the-webpage.html

Ich brauche die htaccess-Datei, um dem Webserver mitzuteilen, dass er die HTML-Datei entfernen soll, damit der Benutzer nach dem Besuch von “http://the-site.com/the-webpage.html” wird stattdessen gesendet an:

http://the-site.com/category/the-webpage

Ich richte die Seiten-Stubs so ein, dass sie dem Dateinamen der Joomla-Seiten folgen, also http://the-site.com/category/the-webpage wird funktionieren.


Meine Frage:

Können Sie mir helfen, die Lösung zum Entfernen von .html aus der URL zu finden, wenn jemand die Website besucht, selbst wenn die HTML-Datei nicht auf dem Server vorhanden ist?


So sah die .htaccess-Datei aus, bevor ich Änderungen vorgenommen habe:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Hier ist die neueste .htaccess-Datei ab 17:35 Uhr Östlich:

# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} \.html$
RewriteRule ^(.*)\.html$ $1 [R=301,L]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress

Die ↑neuesten .htaccess-Änderungen funktionieren. Danke Timo!

  • Sie möchten die hinzugefügten Umschreibungen innerhalb der haben <IfModule mod_rewrite.c Abschnitt auch. Ein [L] Flag könnte auch hier gut hinzugefügt werden, da Sie nach der html-Umschreibung noch andere Umschreibungen haben und diese nicht zutreffen.

    – JAL

    27. Juni 2010 um 21:03 Uhr


  • Ich habe die Umschreibungen in den Abschnitt verschoben, und es gibt mir immer noch einen 404. Könnte dies möglicherweise etwas mit Unterkategorien und meiner Permalink-Struktur zu tun haben?

    – z0min

    27. Juni 2010 um 21:09 Uhr

Dies funktioniert, um eine externe Umleitung zu Ihren neuen URLs zu erzwingen, aber dies ist möglicherweise nicht ideal für Ihre Situation. Ich versuche immer noch zu überlegen, ob es eine Möglichkeit gibt, die Umleitung intern zu halten und die Variable zu aktualisieren, die WordPress verwendet, um zu bestimmen, welche Seite bereitgestellt werden soll, aber bisher habe ich an nichts gedacht, was funktionieren würde.

Gesamte .htaccess:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} \.html$
RewriteRule ^(.*)\.html$ $1 [R=301,L]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

  • Das war’s, Tim! Ich werde den ursprünglichen Beitrag für zukünftige Besucher mit demselben Problem aktualisieren. Vielen vielen Dank.

    – z0min

    27. Juni 2010 um 21:34 Uhr

  • Eine 301-Weiterleitung ist in Ordnung, da die neuen URLs dauerhaft sind. Danke noch einmal.

    – z0min

    27. Juni 2010 um 21:40 Uhr

  • Absolut und nochmals vielen Dank. Es war eines dieser Dinge, die Ihnen beim Entwerfen/Entwickeln einer Website im Hinterkopf blieben und Ihnen sagten: “Ich habe keine Ahnung, wie ich das zum Laufen bringen soll.” Du, mein Freund, bist ein Retter. Danke hundertmal.

    – z0min

    28. Juni 2010 um 3:45 Uhr

Sie möchten eine URL-Umschreibung verwenden

RewriteEngine On
RewriteRule ^(.*)\.html$ $1

  • Ich habe es versucht, indem ich es unterhalb des Codes hinzugefügt habe, den ich oben eingefügt habe, aber ich mache mir Sorgen, dass es ein Problem mit den Variablen geben wird, da die ursprüngliche htaccess-Datei Folgendes enthält: RewriteRule ^index\.php$ – [L]

    – z0min

    27. Juni 2010 um 20:38 Uhr

  • Was meinst du genau mit “Problem mit den Variablen”? Wenn Sie Zurahns Code über Ihre WordPress-Regeldefinitionen stellen, sollte er ohne Probleme das tun, was Sie brauchen (vorausgesetzt, Sie stellen keine tatsächlichen .html-Dateien bereit).

    – Tim Stein

    27. Juni 2010 um 20:41 Uhr

  • Tim, ich habe ursprünglich Zurahns Code unter dem WordPress-Code hinzugefügt. Ich habe es oben hinzugefügt, und es funktioniert immer noch nicht. Es ist ärgerlich, ja, und ich würde dies normalerweise mit einem Suchen/Ersetzen in phpMyAdmin tun, aber es gibt ein paar Posts, die auf externe Websites verlinken, deren URLs HTML-Dateien enthalten. Ich habe dem ursprünglichen Beitrag hinzugefügt, wie der Code gerade aussieht.

    – z0min

    27. Juni 2010 um 21:00 Uhr


  • Ah, nein, du hast recht. Das liegt daran, dass WordPress verwendet werden muss REQUEST_URI um den Anfragepfad zu ermitteln, der von einer internen Umleitung unbeeinflusst bleibt. Sie können natürlich extern umleiten, aber lassen Sie mich überlegen, ob es eine Möglichkeit gibt, dies intern zu tun.

    – Tim Stein

    27. Juni 2010 um 21:09 Uhr

  • Bisher sehr geschätzt, Tim. Wenn dir etwas einfällt, was ich ausprobieren könnte, poste es in einem neuen Kommentar, damit ich dir Requisiten geben kann.

    – z0min

    27. Juni 2010 um 21:11 Uhr

Dies sollte es tun. Es wird eine Anfrage an site.com/category/whatever.html in site.com/category/whatever umschreiben. Es sollte nicht davon abhängig sein, dass die angeforderte Datei vorhanden ist.

    <Directory /var/www/category>
        RewriteEngine on
        RewriteRule (.*)\.html$ /category/$1
    </Directory>

Dies ist das Format für apache2.conf oder virtuelle Hostdateien. Nicht sicher, ob Sie den Befehl in .htaccess verwenden. Es ist am besten, sich darum in der Serverkonfiguration zu kümmern, wenn Sie können, da dies nur einmal beim Serverstart geparst wird und htaccess bei jeder Anfrage geparst wird.

  • Die Site wird auf Dreamhost gehostet, daher habe ich keinen Zugriff auf die Konfigurationsdateien. Ich mache mir Sorgen, dass es ein Problem mit den Variablen geben wird, da die ursprüngliche htaccess-Datei Folgendes enthält: RewriteRule ^index\.php$ – [L]

    – z0min

    27. Juni 2010 um 20:39 Uhr

  • Variablen? In einer htaccess-Datei sind keine Variablen enthalten. Sie $ bedeutet Zeilenende und $1 ist eine Erfassung aus einem regulären Ausdruck. Sie haben nur innerhalb dieser einen Zeile eine Bedeutung.

    – JAL

    27. Juni 2010 um 21:01 Uhr


  • Okay, das verstehe ich endlich. Ich habe aktualisiert, wie meine .htaccess gerade aussieht, und es führt immer noch zu einem 404, wenn ich sie besuche the-site.com/category/the-webpage.html

    – z0min

    27. Juni 2010 um 21:05 Uhr

  • In was wird es umgeschrieben – sagt es 404, dass the-webpage.html nicht gefunden wird, oder einen anderen Dateinamen?

    – JAL

    27. Juni 2010 um 21:07 Uhr

  • Die URL bleibt gleich (the-site.com/category/the-webpage.html) und WordPress schickt mich zu der von mir entworfenen 404-Seite.

    – z0min

    27. Juni 2010 um 21:12 Uhr

1383430cookie-checkEntfernen Sie „.html“ aus der URL über .htaccess für eine WordPress-Website

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

Privacy policy