chrisfah
Goto Top

Bedingte catch-all in .htaccess

suche eine Lösung für rewrite rules mit einer bedingten catch all möglichkeit

Hallo,

bin wieder mal em Ende meiner Weisheiten face-sad

Ich habe folgende .htaccess:
RewriteEngine on 

RewriteRule ^(.*)suchergebnis/seite/([0-9]+)/(.*)$ /searchresult.php?showpage=$2&$3 [qsappend,L]
RewriteRule ^(.*)suchergebnis(.*)$ /searchresult.php?$2 [qsappend,L]
RewriteRule ^suche(.*)$ /search.php?$1 [qsappend,L]
RewriteRule ^detailsuche(.*)$ /search_detailed.php?$1 [qsappend,L]
... und einige mehr ...
RewriteRule ^(.*) catchall.php?$1 [qsappend,L]
Dazu kommen einige .php scripte, die ohne rewrite angesprochen werden.
Ohne die letzte (.*) catchall.php Zeile klappt alles perfekt. Mit dieser Zeile habe ich einer Server Error.

Was suche ich?
Es soll wie in der .htaccess rewriterules angegeben, diese Adressen umgeleitet werden, die .php dateien direkt ausgeführt werden, und alles was dann noch übrig bleibt, soll mit dieser rewriterule abgefangen werden - sozusagen eine selbstdefinierte Error404, wobei ich bewusst keine error404 funktion verwenden will.

Vielen Dank im voraus,
Lg, Chris
Kommentar vom Moderator masterG am Dec 11, 2010 um 11:44:49 Uhr
Verschoben von PHP

Content-Key: 156095

Url: https://administrator.de/contentid/156095

Printed on: April 23, 2024 at 23:04 o'clock

Member: godlie
godlie Dec 01, 2010 at 07:43:51 (UTC)
Goto Top
Hallo, was du suchst ist eine RewriteCond
Member: ChrisFah
ChrisFah Dec 01, 2010 at 19:05:18 (UTC)
Goto Top
Naja, da steh ich vor dem Problem, daß ich nicht weiss, wie ich die Bedingungen formulieren soll.
Letztendlich sollen alle Ausdrücke für diese catchall rule zutreffend sein, daher muss ich (.*) verwenden. Da werden jedoch die bereits zuvor umgeschriebenen auch erneut zwangsbeglückt.

Ich steh vor einem grossen ?.

Lg, Chris
Member: ChrisFah
ChrisFah Dec 01, 2010 at 20:15:05 (UTC)
Goto Top
Zur Erinnerung: Es sollen zuerst alle Urls lt RewriteRule umgeschrieben werden, was dann noch übrig bleibt und kein php file ist, wird mit der catch-all Bedingung bedient.

Habe es nun so gelöst:

RewriteEngine on

RewriteRule ^(.*)suchergebnis/seite/([0-9]+)/(.*)$ /searchresult.php?showpage=$2&$3 [qsappend,L]
RewriteRule ^(.*)suchergebnis(.*)$ /searchresult.php?$2 [qsappend,L]
RewriteRule ^suche(.*)$ /search.php?$1 [qsappend,L]
RewriteRule ^detailsuche(.*)$ /search_detailed.php?$1 [qsappend,L]

# Catch all ausser .php files
RewriteCond %{REQUEST_URI} !(\.) 
RewriteCond %{REQUEST_URI} !^/$ 
RewriteRule ^(.*)$  /test.php?os=$1 [L]

Seltsamerweise darf ich in der ersten RewriteCond NICHT
%{REQUEST_URI} !(\.php)
schreiben, da sonst die stylesheet.css nicht mehr verfügbar scheint. Weiss wer warum das so ist?

Lg, Chris
Member: dog
dog Dec 01, 2010 at 20:49:53 (UTC)
Goto Top
#	Nächste Regel trifft nur zu, wenn die URL keine Datei ist oder nicht existiert
RewriteCond %{REQUEST_FILENAME} !-f
#	Nächste Regel trifft nur zu, wenn die URL kein Ordner oder nicht existiert
RewriteCond %{REQUEST_FILENAME} !-d
Member: ChrisFah
ChrisFah Dec 02, 2010 at 09:03:56 (UTC)
Goto Top
So klappt es auch prime.
Danke !