Deshabilitar reglas de reescritura de WordPress con htaccess para carpeta y su contenido

4 mar 2011, 17:18:00
Vistas: 19.8K
Votos: 5

Tengo otra aplicación PHP en una carpeta llamada app dentro de mi instalación de WordPress, y necesito deshabilitar todas las reglas de reescritura de WordPress para esa carpeta y su contenido. De modo que cuando vaya a www.domain.com/app obtenga la página de mi aplicación, en lugar de la página 404 estándar de WordPress.

Sé que estas son reglas básicas de reescritura de Apache, y he buscado esto, probé algunas cosas y no funcionaron bien.

Casi lo olvido, necesito hacer esto solo editando el archivo htaccess de WordPress. Y la aplicación tiene su propio archivo htaccess.

Gracias.

EDICIÓN: contenido del 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>

EDICIÓN: htaccess de la Aplicación

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>

Estas reglas no hacen mucho, básicamente deniegan el acceso a todos los tipos de archivo PHP y INC, excepto index.php y download.php. Que son los que el usuario necesita acceder, el resto son clases utilizadas internamente por PHP.

EDICIÓN 3: Resolución:

Resultó que no había nada malo con el htaccess de WordPress o la aplicación, después de activar el reporte de errores en el servidor de alojamiento remoto, PHP reportó un archivo corrupto, una vez reemplazado, todo comenzó a funcionar bien. Mi agradecimiento a Wietse Venema por la sugerencia.

8
Comentarios

@Fábio: ¿Puedes compartirnos también las reglas del .htaccess de la aplicación? ¿Es una aplicación pública o está desarrollada sobre un framework público (algo que podamos conocer)?

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

@Jan Fabry: Claro, un momento. La aplicación no usa ningún Framework, fue construida desde cero, solo por diversión y para mantener buenos hábitos.

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

si vas a www.domain.com/app/index.php, ¿también obtienes el error 404 de Wordpress?

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

@Wietse Venema: En cualquier otra ubicación dentro de 'app' aparece un error 404 de Wordpress, en el caso del index.php, simplemente obtengo una respuesta en blanco. Como si no hubiera nada dentro del archivo para procesar.

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

Solo para asegurarme; si agregas un archivo estático test.html con algún texto al directorio app/, ¿también obtienes un error 404 de Wordpress?

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

No hay error. Obtengo el archivo. Curioso, parece que dentro de mi carpeta app el PHP no se está ejecutando.

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

Podría ser que en realidad se esté ejecutando, pero arroja un error que no ves. Intenta leer tu registro de errores o coloca ini_set('display_errors', 1); error_reporting(E_ALL); justo después de la apertura <? de tu index.php.

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

@Wietse Venema: Estaba tan cómodo desarrollando y viendo que funcionaba en mi máquina local, que nunca pensé que algo podría estar mal. Una vez que activé el reporte de errores, el servidor host reportó un archivo corrupto (probablemente durante la subida por ftp), una vez reemplazado comenzó a funcionar como debería. Gracias.

Fábio Antunes Fábio Antunes
5 mar 2011 00:56:56
Mostrar los 3 comentarios restantes
Todas las respuestas a la pregunta 1
1

El archivo .htaccess predeterminado ya admitirá el comportamiento que deseas;

# 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 está en las líneas que comienzan con RewriteCond. Le indican a Apache que aplique la regla RewriteRule . /index.php [L] (que significa "cualquier URL irá a index.php"), solo cuando la URL no es un archivo existente !-f o un directorio existente !-d.

Por lo tanto, esto debería funcionar por defecto. Las reglas de reescritura de WordPress no se aplican cuando intentas visitar un archivo que ya existe.

4 mar 2011 17:55:13
Comentarios

Por supuesto, si la aplicación también utiliza reescrituras para mapear URLs que no existen hacia sí misma, esto no funcionará. Entonces necesitarás una condición específica que indique que la URL no debe comenzar con app/.

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