# mod_rewrite Bildpfad



## anyany (10. Dezember 2007)

ich hab ein Bentuzername und der hat ein Unterverzeichnis und dadrin liegt ein bild. 
der Benutzername und der Bildname kann sich ändern, wie mach ich das? 
so mal "bildlich" dargestellt: 
kunden/benutzername/bitmap.bmp ->kunden/bitmap.bmp 
das soll dazu da sein da ich immer vom schlimmsten ausgeh und die Kunden möglichstwenig mitbekommen sollen wo sie sind und somit nich auf die Idee kommen was zu aendern


----------



## Gumbo (10. Dezember 2007)

Probier mal Folgendes:
	
	
	



```
RewriteRule ^kunden/([^/]+/[^/]+\.[a-z]+)$ $1 [L]
```


----------



## anyany (10. Dezember 2007)

So also ich glaub deine RewriteRule muss noch n bisschen angepasst werden, aber da ich nich so stark mit Regex umgehen kann könntest du das für mich tun ^_^?
Im PHP-Script hab ich die Bildansteuerung so:

```
<img src=web/$_SESSION[bn]/$pfad.bmp>
```
Pfad hol ich zerstückelt aus dem POST
und mein Versuch sieht bis jetzt so aus

```
RewriteCond %{REQUEST_URI} ^kunden/web/(.*)/(.*)\.bmp$ 
RewriteRule ^kunden/bitmap\.bmp web/$2/$3\.bmp
```
Wenn ich das richtig sehe zeigt er bei deinem Beispiel an das das bild in kunden/in-00000000/bitmap.bmp und auf in-00000000/bitmap.bmp zugreifen oder? Aber ich wollte das er /kunden/bitmap.bmp anzeigt ^^


----------



## Gumbo (10. Dezember 2007)

Hast du meinen Vorschlag mal ausprobiert? Die regelt eigentlich genau das, was du vorhast.


----------



## anyany (10. Dezember 2007)

Ja ich habs ausprobiert aber jetzt steht ja im Bildpfad: ^kunden/web/IN-00000000/bitmap.bmp aber es soll ja ^kunden/bitmap.bmp da stehen


----------



## Gumbo (10. Dezember 2007)

Meinst du etwa so:
	
	
	



```
RewriteRule ^kunden/([^/]+\.[a-z]+)$ kunden/web/$1 [L]
```
Falls nicht, beschreibe doch noch einmal genau, welche Anfragen wie umgeschrieben werden soll.


----------



## anyany (10. Dezember 2007)

Also, ich hab ein Bild. Dieses Bild liegt in web/benutzername/bitmap.bmp (Benutzername und Bildname können vareieren). Beim Seitenaufruf soll das Bild angezeigt werden, aber der Pfad, den man durch Rechtsklick->Eigenschaften auslesen kann, soll nicht den Originalpfad haben, sondern kunden/web/bitmap.bmp damit die Kunden nicht auf die Idee kommen irgendewelche Änderungen vorzunehmen.


----------



## Gumbo (10. Dezember 2007)

Und wo kommt der Benutzername her? Wo soll „mod_rewrite“ den herholen?


----------



## anyany (10. Dezember 2007)

Der wird mit einem GET übergeben


----------



## Gumbo (10. Dezember 2007)

Aber doch nicht bei der Anfrage der „/kunden/web/…“-Grafikdatei, oder?


----------



## anyany (10. Dezember 2007)

stimmt verdammt das hab ich garnicht bedacht. gibt es dann nich ne Lösung mit RewriteCond zb wenn die angeforderte URL der Bildpfad ist soll er das machen wie beschrieben? Gibts dazu überhaupt ne Lösung?


----------



## Gumbo (10. Dezember 2007)

Die einzige Möglichkeit sehe ich darin, den Benutzernamen in der Sitzung zu speichern und die Grafik dann mittels eines PHP-Skriptes auszugeben.


----------



## anyany (10. Dezember 2007)

Aber würde der Pfad dann nicht wieder ausgegeben werden?
Hast du vllt mal ein kleines Beispiel?


----------



## Gumbo (10. Dezember 2007)

Das PHP-Skript müsste dann die Binärdaten der Grafik selbst ausgeben. Beispielsweise:
	
	
	



```
readfile($_SERVER['DOCUMENT_ROOT'].'/web/'.$_SESSION['benutzername'].'/'.$_GET['file']);
```


----------



## anyany (10. Dezember 2007)

Hi, das muss doch eigentlich auch mit mod_rewrite gehen oder nicht?
Ich hab jetzt mal überlegt, wieso geht das nich so?

```
RewriteCond %{REQUEST_URI} ^kunden/([^/]+/[^/]+/)([^/]+\.[a-z]+)$
RewriteRule ^kunden/$2 $1$2 [L]
```


----------



## Gumbo (10. Dezember 2007)

Du kannst den Benutzernamen, den du in der Ersatzadresse benötigst, nicht aus dem Nichts herzaubern.


----------



## anyany (11. Dezember 2007)

okay, aber angenommen ich haette die daten wie wuerde das dann aussehen?


----------



## Gumbo (11. Dezember 2007)

Meinst du das zusätzliche PHP-Skript? Das könnte wie folgt aussehen:
	
	
	



```
<?php

	session_start();
	if( !isset($_GET['file']) ) {
		header($_SERVER['SERVER_PROTOCOL'].' 412 Precondition Failed');
		exit;
	}
	if( $_GET['file'] != basename($_GET['file']) ) {
		header($_SERVER['SERVER_PROTOCOL'].' 403 Forbidden');
		exit;
	}
	$absPath = $_SERVER['DOCUMENT_ROOT'].'/web/'.$_SESSION['benutzername'].'/'.basename($_GET['file']);
	if( file_exists($absPath) ) {
		header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found');
		exit;
	}
	$imageTypes = array(null, 'image/gif', 'image/jpg', 'image/png', 'application/x-shockwave-flash');
	if( !($info = getimagesize($absPath)) || !isset($imageTypes[$info[2]]) ) {
		header($_SERVER['SERVER_PROTOCOL'].' 406 Not acceptable');
		exit;
	}
	header('Content-Type: '.$imageTypes[$info[2]]);
	readfile($absPath);
	exit;
```


----------



## anyany (11. Dezember 2007)

Nee ich mein den mod_rewrite-Code trotzdem danke ^^


----------



## Gumbo (11. Dezember 2007)

```
RewriteRule ^kunden/([^/]+\.[a-z]+)$ foobar.php?file=$1 [L]
```


----------

