Frage

Ich habe einen client, der stark bevorzugt zu deaktivieren .htaccess-Dateien, weil Sie, wie die Apache-Konfigurationen selbst.Jedoch, Sie wollen immer noch SEO-freundliche URLs.

Gibt es eine Möglichkeit, benutzerdefinierte permalinks mit Nein .htaccess-Datei?Meine Forschung bisher scheint dies nicht möglich ist, aber vielleicht ist eine der Brillanten Entwickler weiß, wie man das scheinbar Unmögliche möglich sein kann.Vielen Dank im Voraus!

War es hilfreich?

Lösung

Hi @Mike Lee:

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

Apache Dient URLs, die Spiel-Dateien und Verzeichnisse

Apache ist entworfen, um zu dienen-Dateien explizit abgestimmt durch URL oder dienen der index.php gefunden in einem Verzeichnis wenn das Verzeichnis explizit aufeinander abgestimmt sind.

Aber Apache Dienen Können, - URLs Matched by Regex mit mod_rewrite

Wenn Sie möchten, dass der Apache zu entsprechen, URLs, wo es keine echten Verzeichnisse (der Fall mit WordPress-und ziemlich permalinks), dann müssen Sie die Möglichkeit haben, zu sagen, Apache, wie handle URLs unterschiedlich.Und das ist genau das, was mod_rewrite entworfen wurde, zu ermöglichen;es gibt server-Administratoren das festlegen von Regeln für den Abgleich von URLs mit regulären Ausdrücken.Diese Regeln, die route der Folge zu anderen URLs, oft auch tatsächlich .PHP Dateien und manchmal auch mit URL-Parameter übergeben.Letztlich sind die Regeln, die angeben, dass die tatsächlichen Dateien geladen werden.

Und mod_rewrite Konfiguriert ist, wobei Entweder .htaccess oder httpd.conf

Konfigurieren mod_rewrite Sie können nur tun es im inneren .htaccess oder innerhalb der httpd.conf Datei oder eine Datei, die es enthält, wie potenziell httpd-vhosts.conf.Ich bin tatsächlich überrascht, wenn Sie Kunde hat die Fähigkeiten zur Handhabung des Apache, dass Sie nicht bereits wissen.

WordPress Verwendet Immer die Gleiche, Einfache .htaccess Datei

Bewegen Sie sich auf das, was WordPress funktioniert, wenn Sie permalinks WordPress schreibt Folgendes zu der .htaccess Datei, vorausgesetzt, es ist beschreibbar (und in diesem ersten Beispiel angenommen, Ihre website ist gedient von der Wurzel):

# 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

VORBEHALT:Wenn Sie Ihre WordPress-Titelseite Nicht-Root-Verzeichnis

Wenn Sie Ihre Website stattdessen serviert /blog dann die .htaccess - Datei geschrieben würde wie folgt Aussehen:

<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 Routen Alle Nicht-Datei - /Verzeichnis-Matching URLs index.php

So wie Sie sehen können, ist die einzige Sache, die WordPress verwendet wird .htaccess zur Karte alle URL der Domäne /index.php (oder /blog/index.php im 2. Beispiel) außer wenn eine URL entspricht einer tatsächlichen Datei (wie eine .jpg/.gif/.png Bild ein .css ein stylesheet ein .js Skript, etc.) oder wenn es passt eine aktuelle Verzeichnis (in dem soweit ich weiß, ist nicht relevant in einer standard-WordPress-Installation.)

In PHP WordPress Analysiert $_SERVER['REQUEST_URI'] Um zu Entscheiden, Welche zu Laden

In seiner PHP code WordPress schnappt sich den Wert von $_SERVER['REQUEST_URI'] enthält die vollständige URL-Anforderung sans die Domänen-und Schema (d.h.Schema http oder https) und anschließend analysiert der Wert, um zu bestimmen, welche URL angefordert wurde und damit, welche Seiten Sie sollte Belastung.

Umgehung .htaccess?Holen Sie sich den Apache Geladen Virtuelle URLs (aber viel Glück damit!)

Also, wenn Sie möchten, um irgendwie zu umgehen .htaccess Ihr job wäre, Apache, um zu reagieren, um eine beliebige URL dann lade WordPress und setzen $_SERVER['REQUEST_URI'] der URL-Pfad und Parameter;IOW-spoofing ist es aber in einem guten Weg.Das heißt, ich weiß, wenn kenne keine Möglichkeiten, die sind nicht übermäßig kompliziert, das zu tun.

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

Obwohl *Chris_O* korrekt über voranstellen /index.php/ um deine URLs, die ich kriechen, wenn ich sehe, dass.Es fügt 10 Zeichen, um alle URL-zu machen Sie länger und weniger sinnvolle Suchmaschinen aber weit schlimmer macht diese weniger geteilt werden und sieht kryptisch für die Benutzer.Sorry Chris, ich weiß, Sie meinte es gut, aber ugh!

Erstellen Sie Echte Verzeichnisse für Jede URL (Vielleicht?)

Ein Weg, wie man ziemlich permalinks ohne Sie zu berühren Apache würde ein Skript schreiben, das wäre generieren eine tatsächliche Verzeichnis für jede URL, die Sie möchten, und speichern Sie dann eine index.php es würde laden von WordPress.Natürlich wäre enormer Aufwand für die kleinen nutzen und würde es erfordern, dass der server über Schreibzugriff, die schlimmer sein als der Einsatz eines .htaccess Datei.

Ich hasse es zu zugeben, aber das ist, was ich Tat, circa 1998 mit ein .ASP-website, wenn IIS nicht unterstützt URL-rewriting (und ist auch heute noch eine echte PITA!) Es war ein hässlicher hack, war ein Schmerz zu halten, und ich hasste es, aber die URLs sicher waren großartig für Nutzer und für SEO!

Beste Lösung?Add Rewrite-Regeln zu httpd.conf

Zurück zu dem, was ist wahrscheinlich die beste Lösung, und @Simon Brown tatsächlich wird empfohlen, es;add rewrite-Regeln httpd.conf oder eine der include-Dateien wie httpd-vhosts.conf (das ist wie der Apache wird konfiguriert unter localhost auf meinem Mac.) Fügen Sie die folgende Direktive zu machen Sie sicher, dass das Verzeichnis übereinstimmen, das Verzeichnis für Ihre Website:

<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, Die Leistung Zu

Diese Letzte option sollte beseitigen .htaccess und Kontrolle wieder in Ihren Händen.Noch besser ist es etwas schneller, da httpd.conf wird nur einmal geladen, wenn der Apache startet aber .htaccess die Dateien werden geladen und analysiert auf jede URL-Anforderung!

P. S.Eine weitere Sache zu berücksichtigen wäre front-end-Apache mit einem caching-server wie Nginx was ich glaube ist immer ein best practice für high-traffic WordPress-sites dass wirklich brauchen, um performant.Es könnte auf der grünen wiese zwicken, da ich nicht denke, die meisten Menschen wurden mit Nginx zu tun, das URL-rewriting von Apache, aber wenn diese Richtung, die Sie interessiert, hier sind einige links verfolgen:

Andere Tipps

Permalinks ohne mod_rewrite

Ohne eine .htaccess -Datei oder das Ändern Ihrer httpd.conf -Datei ist pathInfo permalinks am besten. Pathinfo Permalinks entsprechen den hübschen Permalinks, außer dass sie mit index.php beginnen.

Um pathInfo permalinks zu verwenden, setzen Sie index.php/ zu Beginn Ihrer benutzerdefinierten Permalink -Struktur:

/index.php/%postname%/

Siehe das Codex -Artikel für mehr Informationen.

In den schlechten alten Zeiten musste WordPress jedes Mal, wenn Sie die Permalink -Struktur geändert haben, eine neue Konfigurationsdatei schreiben. In modernen Setups sind die Rewritriterules unveränderlich:

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

Alle Anfragen für nicht existierende Dateien (dh ein benutzerdefinierter Permalink-Pfad, der nicht mit einer Datei im Dateisystem übereinstimmt) wird durch index.php weitergeleitet und wird übergeben. $_SERVER['REQUEST_URI'] sagt PHP, was tatsächlich angefordert wurde. Ihr Client kann die Umschreiben der Regeln 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 bitten Sie, die Datei zu ändern. Diese Lösung ist vielleicht nicht jedermanns Sache, aber es lohnt sich, in Betracht zu ziehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit wordpress.stackexchange
scroll top