permanentes - wordpress friendly url not working
Reescritura de direcciones de páginas Wordpress (4)
Pruebe esta regla:
RewriteRule ^fake/([^/]+)$ gallery?somevar=$1 [L]
ACTUALIZAR
Intenté usar la reescritura interna de WordPress. Lo que tengo que hacer es una dirección como esta:
http://example.com/galleria/artist-name
enviado a la página gallery.php
con una variable que contiene el artist-name
del artist-name
.
Usé estas reglas según la documentación de Wordpress:
// REWRITE RULES (per gallery) {{{
add_filter(''rewrite_rules_array'',''wp_insertMyRewriteRules'');
add_filter(''query_vars'',''wp_insertMyRewriteQueryVars'');
add_filter(''init'',''flushRules'');
// Remember to flush_rules() when adding rules
function flushRules(){
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
// Adding a new rule
function wp_insertMyRewriteRules($rules)
{
$newrules = array();
$newrules[''(galleria)/(.*)$''] = ''index.php?pagename=gallery&galleryname=$matches[2]'';
return $newrules + $rules;
}
// Adding the id var so that WP recognizes it
function wp_insertMyRewriteQueryVars($vars)
{
array_push($vars, ''galleryname'');
return $vars;
}
Lo extraño ahora es que en mi instalación local de prueba wordpress funciona bien: se llama a la página de la galería y se galleryname
variable galleryname
. En el sitio real, por otro lado, se acepta la URL inicial (ya que no entra en un 404) PERO cambia a http://example.com/gallery
(me refiero a que realmente cambia en la dirección del navegador). bar) y la variable no está definida en gallery.php
.
¿Alguna idea de qué podría causar este comportamiento diferente?
Alternativamente, cualquier otra forma que no pueda pensar que pueda lograr el mismo efecto descrito en las primeras tres líneas está perfectamente bien.
Vieja pregunta
Lo que tengo que hacer es volver a escribir esta dirección:
(1) http://localhost/wordpress/fake/text-value
a
(2) http://localhost/wordpress/gallery?somevar=text-value
Notas:
- la reasignación debe ser transparente: el usuario siempre debe ver la dirección
(1)
-
gallery
es un enlace permanente a una página de WordPress, no una dirección real
Básicamente necesito reescribir la dirección primero (para modificarla) y luego retroceder a la reescritura mod (para permitir que wordpress lo analice a su manera).
Problemas
si simplemente lo hago
RewriteRule ^fake$ http://localhost/wordpress/gallery [L]
funciona pero la dirección en el navegador cambia, lo cual no es bueno, si lo hago
RewriteRule ^fake$ /wordpress/gallery [L]
Obtengo un 404. Probé banderas diferentes en lugar de [L]
pero fue en vano. ¿Cómo puedo hacer que esto funcione?
EDITAR: lleno .htaccess
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^fake$ /wordpress/gallery [R]
RewriteBase /wordpress/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/index.php [L]
</IfModule>
# END WordPress
Disculpas por la respuesta muy demorada aquí, pero creo que lo que debes hacer es lo que sugirió Gumbo pero con la adición del indicador de transmisión / PT :
Este indicador fuerza al motor de reescritura a establecer el campo uri de la estructura request_rec interna al valor del campo de nombre de archivo.
...
Debe usar este indicador si desea mezclar directivas de diferentes módulos que permiten traductores de URL a nombre de archivo.
Aunque Wordpress (a través de mod_php) se ejecuta después de que mod_rewrite está listo, normalmente obtiene el uri original (pre-reescritura), y lo usa para hacer su propia reescritura interna, en lugar del valor de nuevo nombre del archivo.
Así que prueba:
RewriteRule ^fake/([^/]+)$ gallery?somevar=$1 [QSA,PT]
Agregué QSA para que, en caso de que alguien fuera a / wordpress / fake / something? Page = 3, se le pasara correctamente. Déjame saber como funciona eso.
Resuelto, era el complemento Permalink Redirect que debía configurarse para omitir las URL "virtuales" deseadas, de lo contrario emitiría un 301 movido permanentemente.
Usando su editor de HTML / PHP favorito, abra
wp-admin/includes/misc.php
Función función de
got_mod_rewrite
Está alrededor de la línea 18 o más.Comente la función existente:
/* this is commented out */
- Puede eliminar esta función si está seguro de que la solución funciona, pero para estar seguro, simplemente coméntelo en caso de que necesite volver a colocarla.Agregue lo siguiente en su lugar:
function got_mod_rewrite() { $got_rewrite = true; return apply_filters(‘got_rewrite’, $got_rewrite); }
Guarde y cargue.