O primeiro requisito era redirecionar o tráfego de http://www.old-domain.org
para https://example.press
- mas apenas para a raiz do domínio; qualquer página específica deve estar disponível no domínio antigo.
Então estudei um pouco e isso funcionou:
RedirectMatch "^/$" "https://example.press"
(Interessantemente suficiente,https://htaccess.madewithlove.be/alegou que não funciona...)
Então veio uma próxima solicitação: redirecione também outra URL, no formato:
http://www.old-domain.example/site/index.php?act=news
, mas de tal forma que, se alguma notícia específica fosse solicitada, não seria redirecionada (por exemplo, http://www.old-domain.org/site/index.php?act=news&id=12345
)
Isso se mostrou muito desafiador. Muitos documentos e artigos mencionaram que isso não é possível com Redirect
/ RedirectMatch
diretivas, mas é possível com RewriteCond
+ RewriteRule
, que eu percebi que deveria ser algo assim:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} act=news
RewriteRule ^(.*)$ https://example.press [R=302,L]
</IfModule>
(de novo,https://htaccess.madewithlove.be/afirma que funciona)
No entanto, nada parece estar funcionando. Nenhum redirecionamento está acontecendo. Algum equívoco flagrantemente óbvio da minha parte, hein?
Responder1
Acredito que isso 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>
Existem duas regras, e a primeira regra tem duas condições. A segunda condicional da primeira regra usa o !
operador para negar a correspondência em act=news&id=12345
. Há um “AND” implícito entre as condicionais da primeira regra, portanto ambas precisam ser verdadeiras.
A segunda regra corresponde /
apenas à página, sem condições.