rewrites rewriterule rewritecond mod_rewrite htaccess examples ejemplos regex apache mod-rewrite query-string

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:

  1. 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).
  2. 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.