regex - rewritecond - rewriterule htaccess
¿Cómo puedo asociar las variables de cadena de consulta con mod_rewrite? (2)
Si la situación fuera inversa a la pregunta original, sería: RewriteCond% {QUERY_STRING} (/ w +) RewriteRule ^ index.php? Book =% 1? [L, R = 301]
cambie esto / DesignPatterns / 139 en este /index.php?book=DesignPatterns&page=139
Supongamos que tengo URL con parámetros de cadena de consulta como estos:
/index.php?book=DesignPatterns&page=139
/index.php?book=Refactoring&page=285
Usando mod_rewrite , ¿cómo puedo redirigirlos a las URL de SES como estas?
/DesignPatterns/139
/Refactoring/285
RewriteCond %{QUERY_STRING} book=(/w+)&page=(/d+)
RewriteRule ^index.php /%1/%2? [L,R=301]
Debido a que RewriteRule solo mira la ruta (hasta, pero sin incluir, el signo de interrogación), use RewriteCond para capturar los valores en la cadena de consulta.
Tenga en cuenta que las coincidencias de RewriteCond
se capturan en %1
, %2
, etc., en lugar de $1
, $2
, etc.
También tenga en cuenta el ?
al final de RewriteRule
. Le dice a mod_rewrite que no agregue la cadena de consulta original a la nueva URL, por lo que termina con /DesignPatterns/151
intead de /DesignPatterns/151?book=DesignPatterns&page=151
.
Los indicadores [L,R=301]
hacen dos cosas:
-
L
asegura que no se procesarán otras reglas que de lo contrario coincidirían (en otras palabras, asegura que esta es la "última" regla procesada). -
R=301
hace que el servidor envíe una respuesta de redirección. En lugar de reescribir, le dice al cliente que intente de nuevo con la nueva URL. The=301
convierte en un redireccionamiento permanente , de modo que, entre otras cosas, los motores de búsqueda sabrán reemplazar la antigua URL con la nueva URL en sus índices.