Usando mod_rewrite para redirecionar páginas únicas

Usando mod_rewrite para redirecionar páginas únicas

O primeiro requisito era redirecionar o tráfego de http://www.old-domain.orgpara 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/ RedirectMatchdiretivas, 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.

informação relacionada