Sie müssen mod_rewrite verwenden und eine Bedingung (RewriteCond
), die das QUERY_STRING
Server-Variable übereinstimmt gegen.
Versuchen Sie Folgendes in Ihrem Stamm .htaccess
Datei über alle vorhandenen mod_rewrite-Anweisungen.
RewriteEngine On
# PART 1 : Redirect old category URLs
RewriteCond %{QUERY_STRING} ^cat=(\w+)
RewriteRule ^portfolio/category$ /projecten/%1? [R=302,L]
# PART 2 : Redirect other old URLs
RewriteCond %{QUERY_STRING} ^s=(pagename-\w{3}-\w{3})
RewriteRule ^portfolio/post\.php$ /projecten/%1? [R=302,L]
Dies setzt voraus, dass die in xxx
pagename-xxx-xxx
sind 3 literal Wort-Zeichen (dh. a-z
, A-Z
, 0-9
oder _
).
UPDATE # 1: Die?
auf der RewriteRule
Substitution nachlauf ist notwendig, um die Abfragezeichenfolge von dem Ziel zu entfernen. Oder verwenden Sie das Flag QSD
auf Apache 2.4+.
Ändern Sie die 302
(vorübergehende) Umleitung zu 301
(permanent), wenn Sie sicher sind, dass es OK funktioniert. 301 Redirects werden vom Browser zwischengespeichert, was das Testen problematisch machen kann.
UPDATE # 2: In Bezug auf die aktualisierte URL in "Teil 2", versuchen Sie Folgendes statt:
# PART 2 : Redirect other old URLs
# To essentially remove the date prefix, eg. "YYYY-MM-DD-"
RewriteCond %{QUERY_STRING} ^s=/d{4}-/d{2}-/d{2}-(.+)
RewriteRule ^portfolio/post\.php$ /projecten/%1? [R=302,L]
^s=[0-9{4}]+-(.+?)/?[0-9{2}]+-(.+?)/?[0-9{2}]+-(.+?)/?(.*)$
Dies ist ein bisschen wie ein Mash, aber sieht auch zu komplex für das, was Sie erreichen wollen? Zum Beispiel, warum müssen Sie einen optionalen Schrägstrich (dh /?
) übereinstimmen? Ihre Beispiel-URL enthält keine Schrägstriche?
Ein Regex-Muster wie [0-9{4}]+
tut nicht, was Sie denken, dass es tut.Dies würde 1 oder mehrmals mit den Zeichen {}
übereinstimmen. Was Sie scheinbar zu tun versuchen, ist genau 4 Stellen zu entsprechen. z.B. [0-9]{4}
(das ist das gleiche wie /d{4}
, mit einer Kurzzeichen-Klasse).
Was hast du bisher versucht? – darrylyeo