Ich habe einen Client, der .htaccess-Dateien stark deaktiviert, weil er die Apache-Konfigurationen selbst festlegen möchte. Sie möchten jedoch weiterhin SEO-freundliche URLs.
Gibt es eine Möglichkeit, benutzerdefinierte Permalinks ohne .htaccess-Datei zu erstellen? Meine bisherigen Forschungen scheinen darauf hinzudeuten, dass dies nicht möglich ist, aber vielleicht weiß einer der brillanten Entwickler, wie das scheinbar Unmögliche möglich sein kann. Danke im Voraus!
permalinks
htaccess
Mike Lee
quelle
quelle
Antworten:
Hallo @Mike Lee :
Um Ihre Frage zu beantworten, ist es hilfreich zu verstehen, wie alles funktioniert.
Apache stellt URLs bereit, die mit Dateien und Verzeichnissen übereinstimmen
Apache wurde entwickelt, um Dateien bereitzustellen, die explizit mit der URL übereinstimmen, oder um die
index.php
in einem Verzeichnis gefundenen Dateien bereitzustellen, wenn das Verzeichnis explizit übereinstimmt.Apache kann jedoch URLs bereitstellen, mit denen Regex übereinstimmt
mod_rewrite
Wenn Sie möchten, dass Apache mit URLs übereinstimmt, für die es keine echten Verzeichnisse gibt (dies ist bei WordPress und hübschen Permalinks der Fall), müssen Sie Apache auf irgendeine Weise mitteilen können, wie URLs anders behandelt werden sollen. Und genau das
mod_rewrite
sollte es ermöglichen. Serveradministratoren können mithilfe regulärer Ausdrücke Regeln für den Abgleich von URLs festlegen. Diese Regeln leiten das Ergebnis an andere URLs weiter, häufig einschließlich tatsächlicher.PHP
Dateien und manchmal mit übergebenen URL-Parametern. Letztendlich legen die Regeln fest, dass tatsächliche Dateien geladen werden.Und
mod_rewrite
ist entweder.htaccess
oder konfigurierthttpd.conf
Zum Konfigurieren können
mod_rewrite
Sie dies nur innerhalb.htaccess
oder innerhalb derhttpd.conf
Datei oder einer der darin enthaltenen Dateien tun , wie dies möglicherweise der Fall isthttpd-vhosts.conf
. Eigentlich bin ich überrascht, wenn Ihr Client die Fähigkeiten hat, Apache zu steuern, dass er dies noch nicht weiß.WordPress verwendet immer dieselbe einfache
.htaccess
DateiWenn Sie Permalinks festlegen, schreibt WordPress Folgendes in die
.htaccess
Datei, sofern diese beschreibbar ist ( und in diesem ersten Beispiel davon ausgegangen, dass Ihre Website vom Stammverzeichnis aus bereitgestellt wird ):Vorsichtsmaßnahme: Wenn Ihr WordPress-Startseitenverzeichnis nicht root ist
Wenn Ihre Site stattdessen von dort aus bereitgestellt wird, sieht
/blog
die.htaccess
geschriebene Datei folgendermaßen aus:WordPress leitet alle Nicht-Datei- / Verzeichnis-übereinstimmenden URLs an weiter
index.php
Wie Sie sehen können, verwendet WordPress nur
.htaccess
die Zuordnung einer URL zur Domain/index.php
(oder/blog/index.php
im zweiten Beispiel), es sei denn, eine URL stimmt mit einer tatsächlichen Datei überein (z. B. ein.jpg
/.gif
/.png
Bild, ein.css
Stylesheet, ein.js
Skript, usw.) oder wenn es mit einem tatsächlichen Verzeichnis übereinstimmt (was meines Wissens in einer Standard-WordPress-Installation nicht relevant ist.)In
PHP
WordPress Parses, um$_SERVER['REQUEST_URI']
zu entscheiden, was geladen werden sollIn seinem
PHP
Code erfasst WordPress den Wert, der$_SERVER['REQUEST_URI']
die vollständige URL-Anforderung ohne Domain und Schema enthält (dh Schema isthttp
oderhttps
), und analysiert dann den Wert, um zu bestimmen, welche URL angefordert wurde und welche Seiten geladen werden sollen.Umgehen
.htaccess
? Lassen Sie Apache virtuelle URLs laden (aber viel Glück damit!)Wenn Sie also
.htaccess
Ihren Job irgendwie umgehen möchten, müssen Sie Apache dazu bringen, auf eine beliebige URL zu antworten. Laden Sie dann WordPress und legen Sie$_SERVER['REQUEST_URI']
den URL-Pfad plus die Parameter fest. IOW fälscht es aber auf eine gute Weise. Das heißt, ich weiß, wenn ich keine Möglichkeiten kenne, die nicht allzu kompliziert sind, dies zu tun.Einbetten
/index.php/
(Vielleicht?!?)Auch wenn * Chris_O * richtig ist, wenn es darum geht
/index.php/
, Ihren URLs voranzukommen , erschrecke ich, wenn ich das sehe. Es fügt jeder URL 10 Zeichen hinzu, wodurch sie für Suchmaschinen länger und weniger aussagekräftig werden, aber weitaus schlimmer macht sie weniger gemeinsam nutzbar und sieht für Benutzer kryptisch aus. Sorry Chris, ich weiß, dass du es gut gemeint hast, aber ugh!Erstellen Sie echte Verzeichnisse für jede URL (vielleicht?)
Eine Möglichkeit, hübsche Permalinks zu erhalten, ohne Apache zu berühren, besteht darin, ein Skript zu schreiben, das ein tatsächliches Verzeichnis für jede gewünschte URL generiert und dort ein Verzeichnis speichert
index.php
, das WordPress lädt. Das wäre natürlich ein enormer Aufwand für einen winzigen Vorteil und würde erfordern, dass der Server über einen Schreibzugriff verfügt, der schlechter sein muss als die Verwendung einer.htaccess
Datei.Ich gebe es nur ungern zu, aber das habe ich um 1998 mit einer
.ASP
Website gemacht, als ich dasIIS
Umschreiben von URLs nicht unterstützte (und auch heute noch ist es eine echte PITA!). Es war ein hässlicher Hack, es war ein Schmerz zu pflegen und ich hasste es Aber die URLs waren sowohl für Benutzer als auch für SEO großartig!Beste Lösung? Fügen Sie Rewrite Rules hinzu
httpd.conf
Zurück zu der wahrscheinlich besten Lösung, und @Simon Brown hat sie tatsächlich empfohlen. Fügen Sie Ihre Umschreiberegeln zu
httpd.conf
oder einer der Include-Dateien hinzuhttpd-vhosts.conf
(wie Apache bei localhost auf meinem Mac konfiguriert ist). Fügen Sie die folgende Anweisung hinzu, und stellen Sie sicher, dass Sie das Verzeichnis so ändern, dass es mit dem Verzeichnis für Ihre Site übereinstimmt:Bonus! Mit Lockdown kommt auch die Leistung
Diese letzte Option sollte alle eliminieren
.htaccess
und die Kontrolle wieder in ihre Hände legen. Noch besser ist es etwas leistungsfähiger, dahttpd.conf
es nur einmal geladen wird, wenn Apache gestartet wird, aber.htaccess
Dateien bei jeder URL-Anfrage geladen und analysiert werden!PS Eine weitere zu berücksichtigende Sache wäre, Apache mit einem Caching-Server wie Nginx zu versehen, was meiner Meinung nach zu einer bewährten Methode für stark frequentierte WordPress-Sites wird , die wirklich leistungsfähig sein müssen. Es könnte einige Anpassungen auf der grünen Wiese erfordern, da ich nicht glaube, dass die meisten Leute Nginx verwendet haben, um die URL für Apache neu zu schreiben, aber wenn diese Richtung Sie interessiert, sind hier einige Links zu verfolgen:
quelle
Permalinks ohne mod_rewrite
Ohne eine .htaccess-Datei oder ohne Änderung Ihrer httpd.conf-Datei können Sie am besten pathinfo-Permalinks erstellen. Pathinfo-Permalinks sind dieselben wie hübsche Permalinks, außer dass sie mit index.php beginnen.
Um Pathinfo-Permalinks zu verwenden, setzen Sie index.php / an den Anfang Ihrer benutzerdefinierten Permalink-Struktur:
Weitere Informationen finden Sie im Codex-Artikel .
quelle
In den schlechten alten Zeiten musste WordPress jedes Mal, wenn Sie die Permalink-Struktur änderten, eine neue Konfigurationsdatei schreiben. In modernen Setups bleiben die RewriteRules unverändert:
Alle Anforderungen für nicht vorhandene Dateien (dh ein benutzerdefinierter Permalink-Pfad, der nicht mit einer Datei im Dateisystem übereinstimmt) werden über index.php weitergeleitet und
$_SERVER['REQUEST_URI']
teilen PHP mit, was tatsächlich angefordert wurde. Ihr Client kann die Umschreiberegeln in httpd.conf oder .htaccess festlegen, und Sie müssen sie nicht ändern, wenn Sie die Permalink-Struktur optimieren.Einige Plugins versuchen, .htaccess selbst zu ändern, oder fordern Sie auf, die Datei zu ändern. Diese Lösung ist vielleicht nicht jedermanns Sache, aber es lohnt sich, darüber nachzudenken.
quelle