http://www.old-domain.org
Die erste Anforderung bestand darin, den Datenverkehr von nach umzuleiten https://example.press
– dies jedoch nur für die Stammdomäne zu tun; jede spezifische Seite sollte auf der alten Domäne verfügbar sein.
Also habe ich ein wenig recherchiert und das hier hat geholfen:
RedirectMatch "^/$" "https://example.press"
(interessanterweisehttps://htaccess.madewithlove.be/behauptete, es funktioniert nicht ...)
Dann kam die nächste Anfrage: Leiten Sie auch eine andere URL um, und zwar in der Form:
http://www.old-domain.example/site/index.php?act=news
, aber so, dass bei der Anforderung einer bestimmten Nachricht keine Weiterleitung erfolgt (z. B. http://www.old-domain.org/site/index.php?act=news&id=12345
)
Dies erwies sich als sehr anspruchsvoll. In vielen Dokumenten und Artikeln wurde erwähnt, dass dies mit Redirect
/ RedirectMatch
-Direktiven nicht möglich ist, mit RewriteCond
+ jedoch schon RewriteRule
. Ich habe mir gedacht, dass dies ungefähr so aussehen sollte:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} act=news
RewriteRule ^(.*)$ https://example.press [R=302,L]
</IfModule>
(wieder,https://htaccess.madewithlove.be/behauptet, es funktioniert)
Allerdings scheint nichts zu funktionieren. Es finden keine Weiterleitungen statt. Irgendwelche offensichtlichen Missverständnisse meinerseits, oder?
Antwort1
Ich glaube, das wird funktionieren:
<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>
Es gibt zwei Regeln, und die erste Regel hat zwei Bedingungen. Die zweite Bedingung der ersten Regel verwendet den !
Operator, um die Übereinstimmung zu negieren act=news&id=12345
. Zwischen den Bedingungen der ersten Regel gibt es ein implizites „UND“, daher müssen beide erfüllt sein.
Die zweite Regel trifft dann /
nur auf die Seite zu, ohne Bedingungen.