2016-02-12 10 views
5

Sto scrivendo un plug-in di WordPress che utilizza l'API delle impostazioni all'interno di una classe. Così la classe chiama register_settings(), add_settings_field(), e add_settings_section() dall'interno della classe che sta lavorando bene, tranne quando si tenta di inviare il modulo di ottenere un errore del server con il seguente errore nei miei ceppi:WordPress Multisito, cartella di contenuto wp personalizzata e Richiesta superato il limite di 10 reindirizzamenti interni

AH00124: Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace. 

La mia installazione di WordPress è un po 'strana. Si basa su Mark Jaquith's WordPress Skeleton repo e ho spostato la mia cartella di contenuto wp, il mio file wp-config.php all'esterno di WordPress.

Sono anche in esecuzione WordPress tramite Vagrant, quindi potrebbe essere un problema di configurazione del server. Tuttavia, ho appena provato a usare il mio plugin in VVV usando un'installazione standard di WordPress e funziona perfettamente.

directory

mio WordPress si presenta così (compositore installare WP al dir app):

index.php 
wp-config.php 
wp-content/ 
app/ 

Ho aggiunto i miei ceppi di riscrittura in un bidone pasta: http://pastebin.com/QKCFjULZ

mio file .htaccess assomiglia a questo :

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule . - [L] 


RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L] 

RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-.*) /app/$2 [L] 
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ /app/$2 [L] 


RewriteRule . /index.php [L] 

Options -indexes 
</IfModule> 
# END WordPress 
+0

ho ristretto la scelta a non essere un problema con la classe. Ho spostato tutte le funzioni dell'API delle impostazioni all'esterno della classe e le ho caricate nel modo standard. – rugbert

risposta

1

Hai un ciclo reindirizzamento a causa di queste regole

RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-.*) /app/$2 [L] 
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ /app/$2 [L] 

In realtà, è necessario tenere presente che le regole vengono valutate anche dopo una riscrittura. Pertanto, se si dispone di /something/wp-xxx/yyy/zzz, questo verrà riscritto internamente su /app/wp-xxx/yyy/zzz. Ma ora, come puoi vedere, la tua regola corrisponderà di nuovo con la nuova uri /app/wp-xxx/yyy/zzz.

prova, guardando i log di

applying pattern '^([_0-9a-zA-Z-]+/)?(wp-.*)' to uri 'wp-admin/network/options.php', 
rewrite 'wp-admin/network/options.php' -> '/app/wp-admin/network/options.php', 

Poi si hanno

applying pattern '^([_0-9a-zA-Z-]+/)?(wp-.*)' to uri 'app/wp-admin/network/options.php', 
rewrite 'app/wp-admin/network/options.php' -> '/app/wp-admin/network/options.php', 

E si va avanti e avanti ... fino al limite di 10 reindirizzamenti

Per evitare questo comportamento , è necessario aggiungere alcune restrizioni alle regole per assicurarsi che non vengano valutate quando non devono. Una soluzione semplice sarebbe quella di utilizzare un modello di lookahead negativo per assicurarsi richiesta corrente fa non iniziano con /app/ prima di riscriverla:

RewriteRule ^((?!app/)[^/]+/)?(wp-.+)$ /app/$2 [L] 

Infine, il .htaccess potrebbe assomigliare a questo

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/

RewriteRule ^index\.php$ - [L] 

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule^- [L] 

# Rule 1 
RewriteRule ^([^/]+/)?files/(.+)$ wp-includes/ms-files.php?file=$2 [L] 

# Rule 2 
RewriteRule ^((?!app/)[^/]+/)?(wp-.+)$ /app/$2 [L,QSA] 

# Rule 3 
RewriteRule ^((?!app/)[^/]+/)?(.+\.php)$ /app/$2 [L,QSA] 

RewriteRule^index.php [L] 

Options -Indexes 
</IfModule> 
# END WordPress 

Promemoria : le 3 regole vengono eseguite solo su file/cartelle non esistenti.

Esempi:

  • http://domain.tld/files/something o http://domain.tld/xxx/files/something saranno riscritti internamente a /wp-includes/ms-files.php?file=something grazie alla Regola 1
  • http://domain.tld/wp-something/somethingelse o http://domain.tld/xxx/wp-something/somethingelse (dove xxx può essere qualsiasi cosa, tranne app) verranno riscritti internamente /app/wp-something/somethingelse grazie a Regola 2
  • http://domain.tld/file.php o http://domain.tld/xxx/file.php (dove xxx può essere qualsiasi cosa, tranne app) verranno riscritti internamente per /app/file.php grazie alla Regola 3
+0

Grazie per questo, mi dispiace ho perso la risposta. Quindi le regole che hai aggiunto non hanno risolto l'errore di ricorsione. Ho notato che l'URL nel browser non cambia mai per includere/app in modo Solo per mia conoscenza cosa significa RewriteCond? se% {THE_REQUEST} contiene quel modello, quindi sostituire con/app? – rugbert

+0

Leggendo nuovamente la tua domanda, ho notato qualcosa e ho modificato il codice nella mia risposta. Si prega di leggere gli esempi nella parte inferiore con attenzione e dimmi se corrisponde al comportamento che ti aspetti. Ad ogni modo, non importa cosa, dovresti ** non ** avere loop più con questo codice –

+1

Grazie! No, i miei errori di ricorsione, e il sito è molto più veloce. – rugbert

Problemi correlati