mod_rewrite: ¿eliminar cadena de consulta de URL?

Estoy intentando hacer la siguiente redirección (301) usando .htaccess

*? page = 1 redirige a *

(donde * es un comodín).

Básicamente, solo quiero evitar que alguien acceda a una página con? Page = 1 al final de la URL, y en su lugar dirigirlos a la misma URL menos ?page=1 .

¿Hay una manera rápida de hacer esto?

Esto debería hacerlo:

 RewriteEngine On RewriteCond %{QUERY_STRING} ^page=1$ RewriteRule (.*) $1? [R=permanent] 

Linea por linea:

  1. Usted activa la funcionalidad de reescritura.
  2. Usted especifica como condición (“instrucción if”) que la cadena de consulta tiene que ser exactamente page=1 para que se apliquen las siguientes reglas.
  3. A continuación, especifique una regla que diga sustituir la ruta completa (. *) Consigo misma ($ 1), pero vacíe la cadena de consulta (?) Y haga que el resultado sea una redirección permanente (301).

Si desea que la redirección sea temporal (302), puede eliminar la =permanent parte =permanent . Movido temporalmente es el predeterminado para el indicador R

También puede usar el indicador QSD (Query String Discard) para redirigir a algún lugar sin pasar la cadena de consulta.

Si está en Apache 2.4, puede simplemente usar QSD (bandera de descarte de cadena de consulta) para descartar las cadenas de consulta específicas de su url de destino.

Aquí hay un ejemplo para los usuarios de Apache 2.4:

URL anterior: – / foo / bar /? Page = 1

nueva url: – / foo / bar /

Código de Htaccess:

  RewriteEngine on RewriteCond %{THE_REQUEST} \?page=1\sHTTP [NC] RewriteRule ^ %{REQUEST_URI} [L,R,QSD] 

La regla anterior redireccionará cualquier uri con ? Page = 1 para eliminar las cadenas de consulta. Este ejemplo arrojará 500 errores en las versiones de Apache por debajo de 2.4 ya que no son compatibles con QSD.

En versiones inferiores de Apache, ¿puede usar un signo de interrogación vacío ? al final de la url de destino para eliminar las cadenas de consulta.

Un ejemplo :

  RewriteEngine on RewriteCond %{THE_REQUEST} \?page=1\sHTTP [NC] RewriteRule ^ %{REQUEST_URI}? [L,R] 

El ejemplo anterior funciona casi en todas las versiones de apache.

(¡Espero que esto ayude!)

Para eliminar toda la cadena de consulta, esto será suficiente:

 RewriteRule ^(.*) http://domain.com/$1? [R=301,L]