# [Apache][.htaccess] Dateiname weitergeben für Umleitung?



## jHuebner (26. Juni 2008)

Hallo,
Ich verwende WindowsXP Prof. mit XAMPP
Hab das Problem, wenn ich gewisse Änderungen an der .htaccess vornehme das nur noch der Fehler 500 kommt, alle vorhandene Seiten (php,html) werden nicht angezeigt.

Ich möchte auf einer Seite PDF-Dokumente anbieten, wenn der Anwender auf den Link der PDF klickt, soll aber nicht sofort die PDF-Datei angezeigt werden,
zuvor soll eine Nutzungsbedingung-Seite angezeigt werden, die der Anwender mit "JA,ich akzeptiere" bestätigen muss.
Dies ist soweit kein Problem.

Zur Zeit sieht es so aus
1. Die Seite zeigt Links zu PDF-Dateien (Datei10001.pdf)
Der Link zur Datei ist auch "Datei10001.pdf"

2. Die Dateien befinden sich aber nicht im root Ordner (!extra!) sondern im Unterordner "pdf"
Der Ordner PDF ist mittels .htaccess geschützt, so kommt kein Anwender direkt auf die Datei.

3. Mittels php-Datei wird die Nutzungsbedingung angezeigt und erst dann die Datei aus dem Order \PDF\Datei10001.pdf angezeigt.
Soweit funktioniert es.

Jetzt fehlt mir nur noch die verbindung zu Punkt 2 und Punkt 3.

Da die Datei sich nicht im root Ordner befindet entsteht ein absichtlicher Fehler,
diesen Fehler möchte ich abfangen und wenn es sich um die Dateien \Datei*.pdf handelt soll die php Datei aufgerufen werden, dabei benötige ich den Dateinamen.

Wie kann ich nun per .htaccess den Dateinamen an meine php Datei weitergeben?

1. Problem Wenn ich nur "RewriteEngine On" in der .htaccess angebe, hab ich den Fehler 500 und keine Seiten werden mehr angezeigt! Liegt das irgendwie an meinem Apache (XAMPP)? muss man zuvor etwas anpassen?

2. Problem, wenn der Anwender nun die Datei "Datei10001.pdf" anklickt, die ja nicht im Ordner existiert, soll per .hraccess überprüft werden ob es sich um "Datei*.pdf" handelt und dieser Dateiname an meine php-Datei übermittelt werden.

Ich weis nicht was ich genau eintragen muss?!
RewriteRule ^Datei([a-z0-9]+)\.pdf$ /files/Nutzungsbedingung.php?url=$1

so in der Art stell ich mir das vor, aber $1 wird nicht aufgelöst, bekomme nicht "Datei10001.pdf" erhallte wenn nur "$1".


Jetzt sicherlich die Frage warum das ganze so,
ich möchte in meiner HTML-Datei einfach nur die PDF-Datei mit Link als "Datei10001.pdf" angeben (weniger Code) und nicht ständig den ganzen Pfad mit angeben "\files\pdf\Datei10001.pdf"
UND wichtig, wie gesagt möchte ich nicht das der Anwender einfach so direkt auf die Datei kommt.
Wenn der Anwender http://www.DOMAIN.tld/cms/files/pdf/Datei10001.pdf im Browser einträgt, soll entweder eine Fehlermeldung kommen bzw. besser es soll zuvor die Nutzungsbedingung angezeigt werden, erst beim bestätigen der Bedingung darf er das Dokument öffnen.

Vielleicht würde es auch besser sein eher sowas
RewriteRule ^*/pdf/*Datei([a-z0-9]+)\.pdf$ /files/Nutzungsbedingung.php?url=$1

Jedenfalls vermute ich mal das die meissten Probleme aber beim Apache liegen?! denn wieso kommt nur bei "RewriteEngine On" schon der Fehler 500?

Gruß und tausend Dank schonmal
 Tim


----------



## Sven Mintel (26. Juni 2008)

jHuebner hat gesagt.:


> 1. Problem Wenn ich nur "RewriteEngine On" in der .htaccess angebe, hab ich den Fehler 500 und keine Seiten werden mehr angezeigt! Liegt das irgendwie an meinem Apache (XAMPP)? muss man zuvor etwas anpassen?



Jo, muss man(wobei es mich wundert, standardmässig ist XAMPP so konfiguriert, dass das Rewrite-Modul benutzt werden kann).

Poste mal bitte deine httpd.conf


----------



## Gumbo (26. Juni 2008)

Schau mal in die Fehler-Logdatei des Servers.


----------



## jHuebner (27. Juni 2008)

Gumbo hat gesagt.:


> Schau mal in die Fehler-Logdatei des Servers.



Hi, hab das ganze nochmal neu aufgebaut.
Sprich anderer WinXP Prof. Rechner
neuste Version von XAMPP 1.6.6a ZIP Version eingerichtet
und in der .htacces den Eintrag "RewriteEngine on".
Und wieder kommt die Fehlermeldung 500.
In der Log Datei erscheint folgendes:

```
datablock position = 2048
[Fri Jun 27 00:06:41 2008] [alert] [client 127.0.0.1] D:/xampp/htdocs/.htaccess: Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not included in the server configuration
```

Anbei die Datei "D:\xampp\apache\conf\httpd.conf" als .txt Datei

Schonmal vielen Dank an Euch beide!

Wieso wird dies nicht erlaubt? ist es ein Sicherheitsproblem wenn man "RewriteEngine" auf "on" setzt?

PS: Selbst ein "RewriteEngine off" erscheint die Fehlermeldung 500 :-( hätte jetzt angenommen das hierbei kein Fehler kommt.

```
[Fri Jun 27 00:31:32 2008] [alert] [client 127.0.0.1] D:/xampp/htdocs/.htaccess: Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not included in the server configuration
```

Seh ich da Richtig "a module not included"? wie das Modul wird von XAMPP nicht mitgeliefert bzw. ist nicht aktiv? wieso das?


----------



## Sven Mintel (27. Juni 2008)

Moin,

in Zeile 118:
	
	
	



```
#LoadModule rewrite_module modules/mod_rewrite.so
```

Entferne mal dort die Raute am Anfang und starte danach den Apachen neu...das Modul ist garnicht eingebunden(Alles nach der Raute wird ignoriert und zählt als Kommentar)


----------



## jHuebner (27. Juni 2008)

Sven Mintel hat gesagt.:


> Moin,



oh, Moin  na auch noch wach.

was ich noch vor Deiner Nachricht sagen wollte.
Tests wie

```
Redirect /test http://localhost/testneu
Redirect permanent /test http://localhost/testneu
RedirectMatch (.*)\.pdf$  http://localhost/testneu/index.html
```
Funktionieren, solange man die Zeile mit dem "RewriteEngine" weg lässt.

Kannst Du mir erklären wieso die Zeile als REMark (#) gesetzt wurde? gibts Sicherheitsprobleme wenn man die Zeile 
	
	
	



```
LoadModule rewrite_module modules/mod_rewrite.so
```
 aktiviert hat?!

Gruß und Dank
und Gute Nacht ;-)


----------



## Sven Mintel (27. Juni 2008)

jHuebner hat gesagt.:


> oh, Moin  na auch noch wach.



Logisch, ich bin hier das Nachtwächter-Modul :suspekt:

Zur Sache:
Die anderen Sachen benötigen nicht das Rewrite-Modul, deswegen geht es dort.

Sicherheitsprobleme sind mir beim Rewrite-Modul nicht bekannt.
Dass es standardmässig auskommentiert ist, dürfte daran liegen, dass es der Apache nicht benötigt, um zu funktionieren...es schont einfach Ressourcen, wenn man nur Module einbindet, welche man auch benötigt....wie du in der httpd.conf sehen kannst, sind ja die meisten Module auskommentiert...der Apache selbst benötigt sie nicht, um seine Basis-Arbeit zu verrichten.
Wenn du es also nutzen willst, aktiviere es, nichts spricht dagegen


----------

