¿Add_rewrite_rule (..) solo acepta "index.php" como destino de redireccionamiento?

4

Quiero crear un enlace permanente (chris-admin) para un sitio backend de administrador personalizado ubicado en el directorio de temas de mi hijo (wp-content / themes / t25child / UI /). He estado jugando con las reglas de reescritura de Wordpress para lograr esto y notó un comportamiento extraño:

add_rewrite_rule(
        '^chris-admin/(.*)$',
        'wp-content/themes/t25child/UI/$1',
        'top'
    );

La regla ni siquiera es aceptada por wordpress. Probé durante horas y me di cuenta de que WordPress solo acepta reglas que tienen index.php como destino de redireccionamiento . La siguiente regla está funcionando a la perfección.

add_rewrite_rule(
            '^foo/([^/]*)/?',
            'index.php?pagename=$matches[1]&param=foo',
            'top'
        );

¿Puede alguien darme más información sobre esto?

¡Muchas gracias!
-Chris

    
pregunta ChrisBr 10.05.2017 - 12:20

1 respuesta

2

Hay dos sistemas de reescritura diferentes en juego cuando tienes los enlaces permanentes habilitados.

El primero es mod_rewrite de Apache, que básicamente envía cualquier solicitud que no sea para un directorio o archivo físico al archivo principal de WordPress index.php .

El segundo sistema es interno a WordPress, y maneja la conversión de permalinks bonitos en sus vars de consulta de componentes, por lo que se puede consultar la base de datos para el contenido solicitado.

Ahora, su pregunta: ¿add_rewrite_rule (..) solo acepta "index.php" como destino de redireccionamiento?

No, puedes agregar ambos tipos de reglas a través de add_rewrite_rule . WordPress buscará index.php y agregará esa regla a las reglas internas o, de lo contrario, la agregará a la matriz de reglas externas.

Entonces, si ese es el caso, ¿por qué no funciona tu regla? Primero, verifique que la regla no haya llegado al archivo .htaccess. Para que las nuevas reglas se escriban en .htaccess, las reglas deben borrarse, pero no una descarga normal. flush_rewrite_rules acepta un solo argumento booleano, que es falso por defecto. Establecer eso en verdadero hará que WordPress regenere el archivo .htaccess, y su regla debería aparecer.

    
respondido por el Milo 10.05.2017 - 17:45

Lea otras preguntas en las etiquetas