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 11.12.2010 um 12:44:49 Uhr
Verschoben von PHP

Content-ID: 156095

Url: https://administrator.de/forum/bedingte-catch-all-in-htaccess-156095.html

Ausgedruckt am: 26.12.2024 um 22:12 Uhr

godlie
godlie 01.12.2010 um 08:43:51 Uhr
Goto Top
Hallo, was du suchst ist eine RewriteCond
ChrisFah
ChrisFah 01.12.2010 um 20:05:18 Uhr
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
ChrisFah
ChrisFah 01.12.2010 um 21:15:05 Uhr
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
dog
dog 01.12.2010 um 21:49:53 Uhr
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
ChrisFah
ChrisFah 02.12.2010 um 10:03:56 Uhr
Goto Top
So klappt es auch prime.
Danke !