Disabilitare le regole di riscrittura di WordPress per una cartella e il suo contenuto tramite htaccess

4 mar 2011, 17:18:00
Visualizzazioni: 19.8K
Voti: 5

Ho un'altra applicazione PHP in una cartella chiamata app all'interno della mia installazione WordPress, e ho bisogno di disabilitare tutte le regole di riscrittura WordPress per quella cartella e il suo contenuto. In modo che quando vado su www.domain.com/app ottenga la pagina della mia applicazione, invece della pagina 404 standard di WordPress.

So che queste sono regole di riscrittura apache di base, ho cercato una soluzione e ho provato alcune cose che non hanno funzionato bene.

Quasi dimenticavo, ho bisogno di farlo solo modificando il file htaccess di WordPress. E l'applicazione ha il suo proprio file htaccess.

Grazie.

MODIFICA: contenuto htaccess

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

MODIFICA: htaccess dell'Applicazione

DirectoryIndex index.php
<FilesMatch "\.(php|inc)$">
Order allow,deny
deny from all
</FilesMatch>
<FilesMatch "(index.php|download.php)$">
Order allow,deny
allow from all
</FilesMatch>

Queste regole non fanno molto, fondamentalmente negano l'accesso a tutti i file di tipo PHP e INC, eccetto index.php e download.php. Che sono quelli a cui l'utente deve accedere, il resto sono classi utilizzate internamente da PHP.

MODIFICA 3: Risoluzione:

Come è emerso, non c'era nulla di sbagliato con l'htaccess di WordPress o l'applicazione, dopo aver attivato la segnalazione degli errori sul server di hosting remoto, PHP ha segnalato un file corrotto, una volta sostituito, tutto ha iniziato a funzionare correttamente. I miei ringraziamenti a Wietse Venema per il suggerimento.

8
Commenti

@Fábio: Puoi anche fornirci le regole del file .htaccess dall'applicazione? È un'app pubblica, o sviluppata su un framework pubblico (qualcosa che possiamo sapere)?

Jan Fabry Jan Fabry
4 mar 2011 18:36:37

@Jan Fabry: Certo, un attimo. L'applicazione non utilizza alcun Framework, è stata costruita da zero, solo per divertimento e per mantenere buone abitudini.

Fábio Antunes Fábio Antunes
4 mar 2011 19:05:18

se vai su www.domain.com/app/index.php, ricevi anche il 404 di Wordpress?

Wietse Venema Wietse Venema
4 mar 2011 20:19:17

@Wietse Venema: Qualsiasi altra posizione all'interno di 'app' restituisce un errore 404 di Wordpress, nel caso di index.php, ottengo semplicemente una risposta vuota. Come se non ci fosse nulla all'interno del file da elaborare.

Fábio Antunes Fábio Antunes
4 mar 2011 20:48:07

Solo per essere sicuri; se aggiungi un file statico test.html con del testo alla directory app/, ottieni comunque un 404 di Wordpress?

Wietse Venema Wietse Venema
4 mar 2011 22:50:07

Nessun errore. Ricevo il file. Strano, sembra che all'interno della mia cartella app il PHP non venga eseguito.

Fábio Antunes Fábio Antunes
4 mar 2011 23:12:36

Potrebbe essere che il codice venga effettivamente eseguito, ma generi un errore che non vedi. Prova a controllare il tuo errorlog o inserisci ini_set('display_errors', 1); error_reporting(E_ALL); subito dopo l'apertura <? del tuo index.php.

Wietse Venema Wietse Venema
4 mar 2011 23:38:24

@Wietse Venema: Ero così comodo a sviluppare e vedere che funzionava sulla mia macchina locale, che non ho mai pensato potesse esserci qualcosa di sbagliato. Una volta attivato il report degli errori, il server host ha segnalato un file corrotto (probabilmente durante l'upload via ftp), una volta sostituito ha iniziato a funzionare come dovrebbe. Grazie.

Fábio Antunes Fábio Antunes
5 mar 2011 00:56:56
Mostra i restanti 3 commenti
Tutte le risposte alla domanda 1
1

Il file .htaccess di default supporta già il comportamento che desideri:

# 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

La magia sta nelle righe che iniziano con RewriteCond. Queste istruiscono Apache ad applicare la regola RewriteRule . /index.php [L] (che significa "qualsiasi URL andrà a index.php"), solo quando l'URL non è un file esistente !-f o una directory esistente !-d.

Quindi questo dovrebbe funzionare di default. Le regole di riscrittura di WordPress non si applicano quando provi a visitare un file già esistente.

4 mar 2011 17:55:13
Commenti

Naturalmente, se l'applicazione utilizza anche riscritture per mappare URL non esistenti su se stessa, questo non funzionerà. In tal caso, è necessaria una condizione specifica che l'URL non debba iniziare con app/.

Jan Fabry Jan Fabry
4 mar 2011 18:35:03