Zur Navigation

.htaccess Weiterleitung per 301 alte auf neue Seite [6]

51 Jörg

Steht der PHP-Code wirklich ganz am Anfang? da darf keine Leerzeile, aber auch kein Leerzeichen, Tabulator oder sonstiges unsichtbares Zeichen vor dem "<?php" stehen.

25.06.2013 20:18

53 christa

mit DW mit utf-8 editiert kommt der Fehler
mit Notepad ANSI kommt er nicht

obschon Zeile 6 utf-8 spezifiziert, aber das wirkt sich dann wohl nur für html weiter unten aus?

<?php header("HTTP/1.0 404 Not Found"); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>.................................</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Du warst auf dem richtigen Pfad Jörg, besten Dank für die schnelle und selbstlose Hilfe.

25.06.2013 21:13 | geändert: 25.06.2013 21:20

55 christa

Hallo Jörg

wie könnte ich ganze id-Bereiche zusammenfassen? Also zB. alle Seiten mit id=100 bis id=200 umleiten auf 404.php? Gibt es dazu einen bestimmten Term? Damit würde sich die htaccess wesentlich verkleinern.


RewriteCond %{QUERY_STRING} id=123
RewriteRule \.php$ pfad/404.php [L]

lG

02.07.2013 07:33

56 Jörg

id=1[0-9]{2}(&|$)

Das Muster lässt sich folgendermaßen auflösen:

Auf "id=1" folgen mit "[0-9]{2}" zwei weitere Ziffern und danach entweder mit "&" ein weiterer Parameter (z.B. "&bla=blub") oder mit "$" das Ende des Query Strings. Letzteres ist notwendig, damit das Muster keine Zahlen mit mehr als drei Ziffern mit einschließt.

Das Muster deckt also id=100 bis id=199 ab (aber nicht id=1000 bis id=1999)

02.07.2013 09:45 | geändert: 02.07.2013 09:46

57 christa

Zitat von Jörg
id=1[0-9]{2}(&|$)

1) hinter der 2-,oder 3-stelligen Zahl kann irgend was beliebiges folgen. Darf oder muss ich dann das $-Zeichen setzen?

2) darf ich mehrere RewriteCond hintereinander vor die RewriteRule stellen?

Beispiel_
RewriteCond %{QUERY_STRING} 1[0-9]{2}$ (100-199)
RewriteCond %{QUERY_STRING} 2[0-9]{2}$ (200-299)
RewriteCond %{QUERY_STRING} 1[0-9]{3}$ (1000-1999)
RewriteRule \.php$ pfad/404.php [L]


02.07.2013 15:57

58 Jörg

1) hinter der 2-,oder 3-stelligen Zahl kann irgend was beliebiges folgen.

"was beliebiges" schließt auch weitere Ziffern mit ein. Die Zahl kann dann also mehr als zwei bzw. drei Ziffern enthalten.

Darf oder muss ich dann das $-Zeichen setzen?

Wenn irgendwas folgen darf, dann musst du den Ausdruck hinten offen lassen. Ich bezweifle aber, dass du das wirklich willst.

Dieses Muster:

1[0-9]{2}

... findet sich in folgenden Query Strings:

id=123456789

bla=123

id=blub123

bla135=bla

Wenn du dagegen nur solche Query Strings matchen möchtest:

id=135

id=159&bla=blub

... dann bist du mit dem Muster, welches ich in Beitrag 56 gepostet habe, gut bedient. Es stellt sicher, dass vor der Zahl ein "id=" steht, und nicht z.B. ein "bla=", und nach der Zahl folgt entweder gar nichts mehr oder ein weiterer Parameter. Folgende Parameter werden immer mit einem "&" eingeleitet

02.07.2013 16:16 | geändert: 02.07.2013 16:18

59 Jörg

Sorry, hatte ich noch überlesen:

2) darf ich mehrere RewriteCond hintereinander vor die RewriteRule stellen?

Du musst sie mit [OR] verknüpfen, da nicht alle sondern nur eine Bedingung zutreffen soll:

# 100 - 199
RewriteCond %{QUERY_STRING} id=1[0-9]{2}(&|$) [OR]
# 200 - 299
RewriteCond %{QUERY_STRING} id=2[0-9]{2}(&|$) [OR]
# 1000 - 1999
RewriteCond %{QUERY_STRING} id=1[0-9]{3}(&|$) 
RewriteRule \.php$ pfad/404.php [L]

02.07.2013 16:24

60 christa

alles klar, besten Dank Jörg

02.07.2013 16:29