El primer requisito era redirigir el tráfico desde http://www.old-domain.org
hacia https://example.press
, pero sólo hacerlo para la raíz del dominio; cualquier página específica debería estar disponible en el dominio anterior.
Así que estudié un poco y esto funcionó:
RedirectMatch "^/$" "https://example.press"
(suficientemente interesante,https://htaccess.madewithlove.be/afirmó que no funciona...)
Luego, llegó la siguiente solicitud: redirigir también a otra URL, de la forma:
http://www.old-domain.example/site/index.php?act=news
, pero de tal manera que si se solicita alguna noticia específica no sea redirigida (por ejemplo, http://www.old-domain.org/site/index.php?act=news&id=12345
)
Esto resultó ser un gran desafío. Muchos documentos y artículos mencionan que esto no es posible con las directivas Redirect
/ RedirectMatch
, pero sí es posible con RewriteCond
+ RewriteRule
, lo que reuní debería verse así:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} act=news
RewriteRule ^(.*)$ https://example.press [R=302,L]
</IfModule>
(de nuevo,https://htaccess.madewithlove.be/afirma que funciona)
Sin embargo, nada parece funcionar. No se están produciendo redirecciones. Algún concepto erróneo evidentemente obvio de mi parte, ¿eh?
Respuesta1
Creo que esto funcionará:
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{QUERY_STRING} act=news RewriteCond %{QUERY_STRING} !act=news&id=12345 RewriteRule ^(.*)$ https://example.press/ [R=302,L] RewriteRule ^/$ https://example.press/ [R=302,L] </IfModule>
Hay dos reglas y la primera regla tiene dos condiciones. El segundo condicional de la primera regla utiliza el !
operador para negar la coincidencia en act=news&id=12345
. Hay un "Y" implícito entre los condicionales de la primera regla, por lo que ambos deben ser verdaderos.
La segunda regla coincide entonces /
solo con la página, sin condiciones.