Einrichten von WordPress mit benutzerdefinierten Permalinks und keine .htaccess-Datei?

Ich habe einen Client, der es vorzieht, .htaccess-Dateien zu deaktivieren, da sie gerne die Apache-Konfigurationen selbst festlegen. Dennoch möchten sie SEO-freundliche URLs.

Gibt es eine Möglichkeit, benutzerdefinierte Permalinks ohne .htaccess-Datei zu haben? Meine bisherigen Untersuchungen deuten darauf hin, dass dies nicht möglich ist, aber vielleicht weiß einer der brillianten Entwickler, wie das scheinbar Unmögliche möglich ist. Danke im Voraus!

Solutions Collecting From Web of "Einrichten von WordPress mit benutzerdefinierten Permalinks und keine .htaccess-Datei?"

Hallo @ Mike Lee :

Um Ihre Frage zu beantworten, ist es hilfreich zu verstehen, wie alles funktioniert.

Apache bedient URLs, die mit Dateien und Verzeichnissen übereinstimmen

Apache dient dazu, Dateien zu liefern, die explizit mit URL abgeglichen wurden, oder um die index.php in einem Verzeichnis zu finden, wenn das Verzeichnis explizit zugeordnet ist.

Aber Apache kann URLs nach Regex mit mod_rewrite

Wenn Sie möchten, dass Apache die URLs für keine echten Verzeichnisse (mit WordPress und hübschen Permalinks) abgleicht, müssen Sie dem Apache eine Möglichkeit geben, mit URLs anders umzugehen. Und das ist genau das, was mod_rewrite ermöglicht hat; Serveradministratoren können Regeln für die Übereinstimmung von URLs mit regulären Ausdrücken festlegen. Diese Regeln .PHP das Ergebnis an andere URLs weiter, oft einschließlich tatsächlicher .PHP Dateien und manchmal mit übergebenen URL-Parametern. Letztendlich geben die Regeln an, dass die tatsächlichen Dateien geladen werden.

Und mod_rewrite wird entweder mit .htaccess oder httpd.conf

Um mod_rewrite zu konfigurieren, können Sie dies nur innerhalb von .htaccess oder innerhalb der httpd.conf Datei oder einer der darin enthaltenen Dateien tun, wie httpd-vhosts.conf . Eigentlich bin ich überrascht, wenn Ihr Client die Fähigkeiten hat, Apache zu kontrollieren, dass sie das nicht schon wissen.

WordPress verwendet immer die gleiche einfache .htaccess Datei

Wenn Sie WordPress verwenden, schreibt WordPress beim Setzen von Permalinks Folgendes in die .htaccess Datei, vorausgesetzt, es ist beschreibbar ( und in diesem ersten Beispiel vorausgesetzt, dass Ihre Website-Site von der Wurzel aus bedient wird ):

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

Vorbehalt: Wenn Ihr WordPress-Frontpage-Verzeichnis nicht Root ist

Wenn Ihre Site stattdessen von /blog .htaccess wird, würde die .htaccess Datei folgendermaßen aussehen:

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

WordPress routet alle Nicht-Datei- / Verzeichnis-Übereinstimmungs-URLs zu index.php

Wie Sie sehen, verwendet WordPress nur .htaccess für die Zuordnung einer beliebigen URL zur Domain zu /index.php (oder /blog/index.php im zweiten Beispiel), außer wenn eine URL mit einer tatsächlichen Datei übereinstimmt (z B. ein .jpg / .gif / .png Bild, ein .css Stylesheet, ein .js Skript usw.) oder wenn es einem tatsächlichen Verzeichnis entspricht (was .js in einer Standard-WordPress-Installation nicht relevant ist.)

In PHP WordPress analysiert $_SERVER['REQUEST_URI'] zu entscheiden, was $_SERVER['REQUEST_URI']

Innerhalb seines PHP Codes greift WordPress auf den Wert von $_SERVER['REQUEST_URI'] der die vollständige URL-Anfrage ohne Domäne und Schema enthält (dh das Schema ist http oder https ) und parst dann den Wert, um zu bestimmen, welche URL angefordert wurde Seiten sollte es laden.

Umgehen von .htaccess ? Lass Apache virtuelle URLs laden (aber viel Glück damit!)

Wenn Sie also .htaccess umgehen möchten, wäre Ihr Job, Apache auf eine beliebige URL zu reagieren, dann WordPress zu laden und $_SERVER['REQUEST_URI'] als URL-Pfad plus Parameter zu setzen; IOW spoofing es aber auf eine gute Art und Weise. Das heißt, ich weiß, wenn keine Wege bekannt sind, die nicht übermäßig kompliziert sind, das zu tun.

Einbetten /index.php/ (Vielleicht?!?)

Auch wenn * Chris_O * über das Voranstellen von /index.php/ auf deine URLs korrekt ist, schaudere ich, wenn ich das sehe. Es fügt jeder URL 10 Zeichen hinzu, was sie für Suchmaschinen länger und weniger aussagekräftig macht, aber viel schlechter macht sie weniger geteilt und sieht für die Benutzer kryptisch aus. Entschuldigung Chris Ich weiß, dass du es gut meintest , aber hm!

Erstellen Sie echte Verzeichnisse für jede URL (vielleicht?)

Eine Möglichkeit, schöne Permalinks zu erhalten, ohne Apache zu berühren, wäre, ein Skript zu schreiben, das für jede gewünschte URL ein index.php Verzeichnis erzeugt und dann dort eine index.php speichert, die WordPress lädt. Natürlich wäre das ein großer Aufwand für einen kleinen Vorteil und es würde erfordern, dass der Server Schreibzugriff hat, der schlechter sein muss als eine .htaccess Datei zu verwenden.

Ich hasse es zuzugeben, aber das habe ich 1998 mit einer .ASP basierten Website gemacht, als IIS URL-Rewriting nicht unterstützt hat (und auch heute ist es immer noch eine echte PITA!) Es war ein hässlicher Hack, war ein Schmerz zu pflegen und Ich hasste es, aber die URLs waren großartig sowohl für die Nutzer als auch für SEO!

Beste Lösung? Hinzufügen von Rewrite-Regeln zu httpd.conf

Zurück zu dem, was wahrscheinlich deine beste Lösung ist, und @Simon Brown hat es tatsächlich empfohlen; httpd.conf Sie Ihre Umschreibungsregeln zu httpd.conf oder einer der Include-Dateien wie httpd-vhosts.conf (so ist Apache auf meinem Mac auf localhost konfiguriert.) Fügen Sie die folgende statement hinzu, um sicherzustellen, dass das Verzeichnis dem Verzeichnis für Ihren httpd-vhosts.conf Seite? ˅:

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

Bonus! Mit Lockdown kommt auch performance

Diese letzte Option sollte alle .htaccess eliminieren und die Kontrolle zurück in ihre Hände legen. Noch besser ist es etwas leistungsfähiger, da httpd.conf nur einmal beim Start von Apache geladen wird, aber .htaccess Dateien werden bei jeder URL-Anfrage geladen und geparst!

PS Eine weitere Sache wäre, Apache mit einem Caching-Server wie Nginx zu konfrontieren, von dem ich glaube, dass es eine Best Practice für stark frequentierte WordPress-Sites wird , die wirklich performant sein müssen. Es könnte eine Optimierung des grünen Feldes erfordern, da ich glaube nicht, dass die meisten Leute Nginx benutzt haben, um das URL-Rewriting für Apache durchzuführen, aber wenn diese Richtung dich interessiert, sind hier einige Links zu verfolgen:

  • WordPress Nginx Proxy-Cache-Integrator
  • Verwenden von Nginx als Caching-Proxy mit WordPress + Apache
  • Nginx als Front-End-Proxy-Cache für WordPress
  • WordPress, Nginx und WP Super Cache
  • Nginx & WordPress MU mit wp-super-cache
  • Wie man WordPress mit Nginx und WP Super Cache beschleunigt
  • Nginx Rewrite Regeln für W3 Total Cache Plugin
  • Tweak Nginx für WordPress – Schöne URLs und WP Super Cache

Permalinks ohne mod_rewrite

Ohne eine .htaccess-Datei oder die Änderung Ihrer httpd.conf-Datei können Sie am besten performinfo permalinks. Pathinfo-Permalinks sind die gleichen wie hübsche Permalinks, außer dass sie mit index.php beginnen.

Um pathinfo-Permalinks zu verwenden, setzen Sie index.php / am Anfang Ihrer benutzerdefinierten Permalink-Struktur:

 /index.php/%postname%/ 

Weitere Informationen finden Sie im Codex-Artikel .

Zurück in den Schlechten Alten Tagen musste WordPress jedes Mal, wenn Sie die Permalink-Struktur änderten, eine neue Konfigurationsdatei schreiben. In modernen Setups sind die RewriteRules unverändert:

 # BEGIN WordPress  RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]  # END WordPress 

Alle Anfragen für nicht existierende Dateien (dh ein benutzerdefinierter Permalink-Pfad, der nicht mit einer Datei im Dateisystem übereinstimmt) werden durch index.php weitergeleitet, und $_SERVER['REQUEST_URI'] teilt PHP mit, was tatsächlich angefordert wurde. Ihr Client kann die Umschreibungsregeln in httpd.conf oder .htaccess festlegen, und Sie müssen ihn nicht ändern, während Sie die Permalink-Struktur optimieren.

Einige Plugins versuchen, .htaccess selbst zu modifizieren oder Sie zu bitten, die Datei zu modifizieren. Diese Lösung ist vielleicht nicht jedermanns Sache, aber es lohnt sich, darüber nachzudenken.