apache - rewritecond - rewriterule flags
mod_rewrite: ¿eliminar cadena de consulta de URL? (4)
Esto debería hacerlo:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^page=1$
RewriteRule (.*) $1? [R=permanent]
Linea por linea:
- Usted activa la funcionalidad de reescritura.
- 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. - 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
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?
Para eliminar toda la cadena de consulta, esto será suficiente:
RewriteRule ^(.*) http://domain.com/$1? [R=301,L]
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!)
También puede usar el indicador QSD (Query String Discard) para redirigir a algún lugar sin pasar la cadena de consulta.