Impostazione WordPress con permalink personalizzati e nessun file .htaccess?
-
16-10-2019 - |
Domanda
Ho un cliente che preferisce fortemente al file .htaccess disabilitare perché a loro piace impostare le configurazioni di Apache stessi. Tuttavia, vogliono ancora gli URL SEO-friendly.
C'è un modo per avere permalink personalizzati senza file .htaccess? La mia ricerca finora sembra indicare questo non è possibile, ma forse uno degli sviluppatori brillanti sa come l'apparentemente impossibile può essere possibile. Grazie in anticipo!
Soluzione
Ciao @ Mike Lee :
Per rispondere alla tua domanda è utile per capire come funziona il tutto.
Apache Serve URL che corrispondono file e directory
Apache è stato progettato per servire i file in modo esplicito appaiati per URL, o per servire il index.php
trovato in una directory quando la directory è esplicitamente abbinato.
Ma Apache può servire URL accompagnata da Regex con mod_rewrite
Se si desidera Apache per abbinare gli URL per cui non ci sono veri e propri indici (il caso con WordPress e graziose permalinks) allora è necessario avere un modo per dire ad Apache come gestire gli URL in modo diverso. E questo è esattamente ciò che mod_rewrite
è stato progettato per consentire; dà amministratori di server la possibilità di impostare regole per gli URL utilizzando le espressioni regolari. Coloro percorso regole il risultato ad altri URL, spesso anche i file in realtà .PHP
e, talvolta, con i parametri URL passato. In definitiva le regole specificano che i file effettivi vengono caricati.
E mod_rewrite
è configurato con entrambi i .htaccess
o httpd.conf
Per configurare mod_rewrite
si può fare solo all'interno .htaccess
o all'interno del file httpd.conf
o uno dei file che include, come potenzialmente httpd-vhosts.conf
. In realtà Sono sorpreso se si cliente ha le competenze per controllare Apache che non lo sanno già.
WordPress sempre utilizza lo stesso file .htaccess
semplice
Passando a ciò che fa WordPress, quando si imposta permalink WordPress scrive quanto segue al file .htaccess
, ammesso che sia scrivibile ( e in questo primo esempio supponendo che il vostro sito web è servita dalla radice ) :
# 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
Avvertimento: quando il vostro WordPress Front Page Directory è Non Root
Se il sito è invece servita da /blog
, allora il file .htaccess
scritta sarebbe simile a questa:
<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 percorsi tutti i non-File / URL corrispondenti Directory per index.php
Quindi, come si può vedere, l'unica cosa che usi WordPress .htaccess
per è quello di mappare qualsiasi URL del dominio /index.php
(o /blog/index.php
nel 2 ° esempio) tranne quando un URL corrisponde a un file vero e proprio (come ad esempio un / .jpg
immagine .gif
/ .png
, un foglio di stile .css
, uno script .js
, etc.) o quando si corrisponde a una directory vera ( che per quanto ne so non è rilevante in una installazione standard di WordPress.)
In PHP
WordPress Analizza $_SERVER['REQUEST_URI']
per decidere il da caricare
All'interno della sua WordPress codice PHP
afferra il valore di $_SERVER['REQUEST_URI']
che contiene la richiesta URL completo sans il dominio e lo schema (cioè regime è http
o https
) e poi analizza il valore per determinare quale fosse URL richiesto e quindi quali pagine si deve caricare.
Esclusione .htaccess
? Ottenere Apache per caricare URL virtuali (ma buona fortuna con quello!)
Quindi, se si vuole in qualche modo bypass .htaccess
vostro lavoro sarebbe quella di ottenere Apache per rispondere a un URL arbitrario quindi caricare WordPress e set $_SERVER['REQUEST_URI']
essere il sentiero URL più parametri; IOW spoofing, ma in senso buono. Detto questo, so che se conosco nessun modi che non sono eccessivamente complicato per farlo.
Embedding /index.php/
(forse?!?)
Anche se * * Chris_O è corretta su anteponendo /index.php/
ai tuoi URL I rabbrividire ogni volta che vedo questo. Si aggiunge 10 caratteri per ogni URL che li rende più lunga e meno significativo per i motori di ricerca, ma di gran lunga peggiore li rende meno condivisibili e sembra criptico per gli utenti. Spiacente Chris Lo so che dire bene, ma ugh!
Crea reale directory per ogni URL (forse?)
Un modo per ottenere pretpermalinks ty Senza toccare Apache sarebbe quello di scrivere uno script che genererebbe una directory vera per ogni URL che si desidera e quindi memorizzare un index.php
lì che sarebbe caricare WordPress. Naturalmente questo sarebbe enorme sforzo per la piccola beneficio e sarebbe necessario il server di avere accesso in scrittura che deve essere peggio di utilizzare un file .htaccess
.
Odio ammetterlo, ma questo è quello che ho fatto circa 1998 con un sito web .ASP
-based quando IIS
non supportava la riscrittura degli URL (e ancora oggi è ancora un vero e proprio PITA!) E 'stato un brutto hack, è stato un dolore per sostengo e ho odiato, ma gli URL sicuri erano ottimi sia per gli utenti e per SEO!
soluzione migliore? Aggiungere regole di riscrittura httpd.conf
Torna a ciò che è probabilmente la migliore soluzione, e @Simon Brown effettivamente consigliato; aggiungere le regole di riscrittura per httpd.conf
o uno dei file include come httpd-vhosts.conf
Aggiungere la seguente realizzazione direttiva sicuri di cambiare la directory in modo che corrisponda la directory per il sito (che è come Apache è configurato in localhost sul mio Mac.):
<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! Con Lockdown Viene prestazioni Troppo
Questa ultima opzione dovrebbe eliminare qualsiasi .htaccess
e mettere il controllo nelle loro mani.
Ancora meglio è leggermente più performante in quanto httpd.conf
viene caricato solo una volta quando si avvia Apache ma file .htaccess
vengono caricati ed elaborati su ogni richiesta URL!
P.S. Un'altra cosa da considerare potrebbe essere quella di front-end Apache con un server di caching come Nginx che credo sta diventando un best practice per i siti ad alto traffico WordPress che davvero bisogno di essere performante. Si potrebbe prendere campo tweaking verde perché non credo che la maggior parte delle persone hanno utilizzato Nginx per fare la riscrittura degli URL per Apache ma se che gli interessi direzione si Ecco alcuni link da perseguire:
- WordPress Nginx delega cache di integratore
- Utilizzando Nginx come un proxy caching con Wordpress + Apache
- Nginx come un fronte -end proxy cache per WordPress
- WordPress, Nginx e WP Super Cache
- Nginx e WordPress MU w / wp-super cache di
- Come velocizzare WordPress con nginx E WP Super cache
- Nginx regole di riscrittura per W3 Total Cache Plugin
- Tweak Nginx per WordPress - URL Pretty & WP Super Cache
Altri suggerimenti
Permalinks senza mod_rewrite
Senza un file .htaccess o modificare il file httpd.conf il meglio che puoi fare è pathinfo permalink. Pathinfo permalink sono gli stessi piuttosto permalinks tranne che iniziano con index.php.
Per usare pathinfo permalink messo index.php / all'inizio della vostra struttura dei permalink personalizzati:
/index.php/%postname%/
Codex articolo per ulteriori informazioni.
Torna nei vecchi tempi, WordPress aveva bisogno di scrivere un nuovo file di configurazione ogni volta che è stata modificata la struttura dei permalink. In configurazioni moderni, i RewriteRules sono immutabili:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Tutte le richieste di file inesistente (vale a dire un percorso. Permalink personalizzato che non corrisponde un file nel file system) viene passato attraverso index.php, e $_SERVER['REQUEST_URI']
dice PHP quanto effettivamente richiesto. Il vostro cliente può impostare le regole di riscrittura in httpd.conf o .htaccess, e non sarà necessario modificare come si ottimizzare la struttura dei permalink.
Alcuni plugin tentano di modificare se stessi .htaccess, o ti chiedono di modificare il file. Questa soluzione non può essere per tutti, ma vale la pena considerare.