Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Hilfe bei RewriteRule [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-consult PHP Entwicklung
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Hilfe bei RewriteRule


 
heinetz
04-02-2010, 15:44 
 
Hallo Forum,

ich habe folgende RewriteRule definiert im Verzeichnis '/_newsletter/' definiert, die soweit funktioniert:

RewriteRule ^([^index.php].*)$ /_newsletter/index.php?content=$1&%{QUERY_STRING}

Das sorgt dafür, dass alle Anfragen unterhalb dieses Verzeichnisses nach /_newsletter/index.php
umgeleitet werden, wo ich den Querystring in der Variable $_GET['content'] verarbeiten kann.

Beispiel:
---------
Ich fordere im Browser http://test.leo.dev/_newsletter/Stuttgard_2/ an und Anfrage
wird von /_newsletter/index.php verarbeitet.

Die in der RewriteRule defnierte Ausnahme, alle Anfragen nach index.php nicht umzuleiten
wird benötigt, um die Endlosschleife zu verhindern. Was ich nun möchte ist dass die Anfrage
nach:

http://test.leo.dev/_newsletter/Stuttgard_2/test.php

... nicht umgeletet wird, kriegs aber nicht hin, weil ich nicht wirklich verstehe, was genau

^([^index.php].*)$

... macht. Das erste ^ verstehe ich als 'am Anfang stehed', das runde Klammerpaar ist
der Inhalt der Variable $1, das ^ innerhalb der eckigen Klammern steht m.E. für 'nicht',
die eckigen Klammern machen das 'nicht'index.php zu einer Zeichenklasse, was aber sollen
.* am Ende. Wenn ich das weg lasse, funktioniert die Umleitung nicht mehr.

Wie setze schliesse ich die Umleitung für Anfagen von static.html in einem Unterverzeichnis
aus ?

kann mir das jemand verraten ?

tausen dank und

beste gruesse,
heinetz

 
Kropff
04-02-2010, 15:48 
 
Ups, schon verschoben.

Peter

 
wahsaga
04-02-2010, 15:52 
 
weil ich nicht wirklich verstehe, was genau

^([^index.php].*)$

... macht.
Nichts sinnvolles ...

Das erste ^ verstehe ich als 'am Anfang stehed', das runde Klammerpaar ist der Inhalt der Variable $1, das ^ innerhalb der eckigen Klammern steht m.E. für 'nicht', die eckigen Klammern machen das 'nicht'index.php zu einer Zeichenklasse,
Genau - sie sorgen dafür, dass keines (wegen ^) der Zeichen aus der Klasse der Zeichen i, n, d, e, x, Punkt, p, h und noch mal p an dieser Stelle als Match angesehen wird.

Das beabsichtigte, nämlich auf genau die Zeichenkette index.php zu testen, macht dieser Ausdruch ganz und gar nicht.

Für das gewünschte komplett sinnfrei.
was aber sollen .* am Ende.
Die sorgen dafür, dass ein beliebiges Zeichen (.) beliebig oft (*) vorkommen darf.

Wie setze schliesse ich die Umleitung für Anfagen von static.html in einem Unterverzeichnis aus ?
Am besten per RewriteCond, die den REQUEST_URI o.ä. explizit darauf testet.

 
heinetz
04-02-2010, 16:49 
 
ok, wenn das komplett sinnfrei ist ...
(obwohl es grundsetzlich das macht, was es soll)
... will ich versuchen das ganze sinnvoll zu gestalten:

meine Verzeichnisstruktur:

/_newletter/
/_newletter/index.php
/_newsletter/irgendein_unter_verzeichnis/
/_newsletter/irgendein_unter_verzeichnis/index.php
/_newsletter/irgendein_unter_verzeichnis/static.html
/_newsletter/irgendein_unter_verzeichnis/images/
/_newsletter/irgendein_unter_verzeichnis/images/image.jpg

Ich möchte, dass der Aufruf von:

/_newsletter/irgendein_unter_verzeichnis/index.php bzw.
/_newsletter/irgendein_unter_verzeichnis/

nach:

/_newletter/index.php?content=irgendein_unterverzeichnis/index.php

... umgeleitet wird.

RewriteRule ^(/_newsletter/.*/index.php)$ /_newsletter/index.php?content=$1

Die dem ursprünglichen Aufruf anhängenden Variablen sollen
in dem ausgeführten Script erhalten bleiben. Ich versuche
mich mal ...

beste gruesse,
heinetz

edit_1:

das hier schient sofort zu funktionieren:

RewriteRule ^(.*/index.php)$ /_newsletter/index.php?content=$1&%{QUERY_STRING}

"Leite alle Anfragen nach irgendeine_zeichenfolge gefolgt von "/index.php" nach
/_newsletter/index.php um."

Trotzdem ist mir nicht ganz klar warum:

1. Wird der Ausdruck '.*/index.php' nun auf die Request_uri (z.B. '/_newsletter/unterverzeichnis/')
oder nur auf '/unterverzeichnis/' angewandt, weil die Regel in einer .htaccess definiert wird, die
sich im Verzeichnis /_newsletter/ befindet. Also quasi relativ.

2. Unabhängig davon würde ich denken, dass ich eine Endlosschleife produziert habe, weil
der Ausdruck .*/index.php genauso auf das Umleitungsziel passt, wenn .* für ein beliegiges
Zeichen egal wie oft (also auch kein mal) steht.


beste gruesse,
heinetz

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 04:05 Uhr.