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.phpin 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_rewritesollte 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 .PHPDateien und manchmal mit übergebenen URL-Parametern. Letztendlich legen die Regeln fest, dass tatsächliche Dateien geladen werden.
Und mod_rewriteist entweder .htaccessoder konfigurierthttpd.conf
Zum Konfigurieren können mod_rewriteSie dies nur innerhalb .htaccessoder innerhalb der httpd.confDatei oder einer der darin enthaltenen Dateien tun , wie dies möglicherweise der Fall ist httpd-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 .htaccessDatei
Wenn Sie Permalinks festlegen, schreibt WordPress Folgendes in die .htaccessDatei, sofern diese beschreibbar ist ( und in diesem ersten Beispiel davon ausgegangen, dass Ihre Website vom Stammverzeichnis aus bereitgestellt wird ):
# 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
Vorsichtsmaßnahme: Wenn Ihr WordPress-Startseitenverzeichnis nicht root ist
Wenn Ihre Site stattdessen von dort aus bereitgestellt wird, sieht /blogdie .htaccessgeschriebene Datei folgendermaßen aus:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>
WordPress leitet alle Nicht-Datei- / Verzeichnis-übereinstimmenden URLs an weiter index.php
Wie Sie sehen können, verwendet WordPress nur .htaccessdie Zuordnung einer URL zur Domain /index.php(oder /blog/index.phpim zweiten Beispiel), es sei denn, eine URL stimmt mit einer tatsächlichen Datei überein (z. B. ein .jpg/ .gif/ .pngBild, ein .cssStylesheet, ein .jsSkript, usw.) oder wenn es mit einem tatsächlichen Verzeichnis übereinstimmt (was meines Wissens in einer Standard-WordPress-Installation nicht relevant ist.)
In PHPWordPress Parses, um $_SERVER['REQUEST_URI']zu entscheiden, was geladen werden soll
In seinem PHPCode erfasst WordPress den Wert, der $_SERVER['REQUEST_URI']die vollständige URL-Anforderung ohne Domain und Schema enthält (dh Schema ist httpoder https), 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 .htaccessIhren 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 .htaccessDatei.
Ich gebe es nur ungern zu, aber das habe ich um 1998 mit einer .ASPWebsite gemacht, als ich das IISUmschreiben 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 hinzuhttpd.conf
Zurück zu der wahrscheinlich besten Lösung, und @Simon Brown hat sie tatsächlich empfohlen. Fügen Sie Ihre Umschreiberegeln zu httpd.confoder einer der Include-Dateien hinzu httpd-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:
<Directory "/home/example_user/public_html/">
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</Directory>
Bonus! Mit Lockdown kommt auch die Leistung
Diese letzte Option sollte alle eliminieren .htaccessund die Kontrolle wieder in ihre Hände legen. Noch besser ist es etwas leistungsfähiger, da httpd.confes nur einmal geladen wird, wenn Apache gestartet wird, aber .htaccessDateien 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: