Schrift
[thread]3236[/thread]

mod_perl2 und Zugriff auf Dateien



<< >> 6 Einträge, 1 Seite
toby
 2007-05-06 14:48
#30386 #30386
User since
2006-04-14
66 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen,

wie kann ich unter mod_perl2 auf Dateien innerhalb des gleichen Ordners zugreifen? Wenn ich versuche auf Dateien im gleichen Ordner zuzugreifen, wird nur die gleiche Seite geliefert, die mod_perl2 produziert. Wenn ich aber auf Dateien im drübergelegenen Ordner zugreife, klappt es wie gewohnt. Hier mein Code:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package jeden::Index;
use strict;
use warnings;
use Apache2::RequestRec ();
use Apache2::RequestIO ();
use Apache2::Const -compile => qw(OK);

my $str;

sub handler {

my $a = shift;
$a->content_type('text/html');

$str = sprintf <<EOF;
<html>
<head>
<title>test</title>
</head>
<body>
<h1>test</h1>
<table width="100%">
<tr>
<td>
<ul>
<li><a href="test.html">test.html</a></li>
<li><a href="test.txt">test.txt</a></li>
<li><a href="../klappt.html">klappt.html</a></li>
</ul>
</td>
</tr>
</table>
</body>
</html>
EOF
$a->print ($str);
return Apache2::Const::OK;
}
1;


Auf die ersten zwei (test.html und test.txt) kann ich nicht zugreifen, dagegen "klappt.html", welches im Ordner höher liegt kann ich problemlos aufrufen.


Hier noch meine Konfiguration von mod_perl:

Code: (dl )
1
2
3
4
5
6
7
Alias /jeden /var/www/vhost/test/jeden
<Directory /var/www/vhost/test/jeden>
SetHandler perl-script
PerlResponseHandler jeden::Index
PerlOptions +ParseHeaders
Options +ExecCGI
</Directory>


Was mache ich falsch?

Danke
Tobias
nepos
 2007-05-06 15:13
#30387 #30387
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Bin mir nicht ganz sicher, aber ich glaube, durch ExecCGI will der Apache jede Datei in dem Verzeichnis als CGI behandeln. Oder welche Fehlermeldung erhältst du denn genau?
toby
 2007-05-06 15:30
#30388 #30388
User since
2006-04-14
66 Artikel
BenutzerIn
[default_avatar]
Hallo nepos, hallo community,

> Bin mir nicht ganz sicher, aber ich glaube, durch ExecCGI will der Apache jede Datei in dem Verzeichnis als CGI behandeln. Oder welche Fehlermeldung erhältst du denn genau?

Leider gar keine. Der Aufruf z.B von http://test/jeden/test.txt liefert mir die Seite, die Index.pm produziert mit einem sauberen 200'er Code:

Code: (dl )
192.168.0.48 - - [06/May/2007:13:21:17 +0200] "GET /jeden/test.txt HTTP/1.1" 200 285


Auch, wenn ich auf etwas nichtexistierendes zugreife, wie z.B http://test/jeden/gibt_es_nicht bekomme ich Ergebnis von jeden::Index.pm.

Es scheint also, dass mod_perl alles was unterhalb vom jeweiligen modul requestet wird abfängt und sich selber ausliefert :( Das wäre aber ganz schlecht und ein Ausschlusskriterium für mich.

Wer kann helfen?
Gruß! :)
Tobias\n\n

<!--EDIT|toby|1178451212-->
nepos
 2007-05-06 17:35
#30389 #30389
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Sorry, dann bin ich auch grade überfragt.
toby
 2007-05-06 18:16
#30390 #30390
User since
2006-04-14
66 Artikel
BenutzerIn
[default_avatar]
Hi nepos :)

> Sorry, dann bin ich auch grade überfragt.

Danke trotzdem für den Versuch :)

Momentan helfe ich mir als workaround aus, dass ich es etwas umstrukturiert habe und die Dateien, auf die man zugreiffen soll, tatsächlich im extra Ordner eine Ebene höher plaziert habe.

Also:

Code: (dl )
1
2
3
.../vhost/test \
|->ordner/test.pdf
|->modul/Index.pm


An sich sieht es nun auch logischer und strukturierter aus, als vorhin mit files im gleichen Ordner. Trotzdem würde es mich interessieren, ob es mit files zum download im gleichen Ordner geht. Mal qucken, ob noch jemand ne Idee hat.

Viele Grüße! :)
Tobias\n\n

<!--EDIT|toby|1178461545-->
Gast Gast
 2007-10-02 02:04
#100201 #100201
Ist doch klar: Du deinen handler als ResponseHandler angelegt, d.h. jeder request, auch
/jeden/test.html
wir von diesem bearbeitet, und statt test.html liefert er immer nur das Listing.
../klappts hat dann eine andere Url (/klappts.html ?) da greift dann der normale handler , also bekommst du auch klappts.html.

Ich weiss ja nicht genau was du erreichen willst, aber wenn du willst, dass ein Request '/jeden' vom handler mit einer Übersicht ausgeliefert wird, der Request /jeden/test.html aber nicht. dann wäre die Lösung, einen anderen handler zu nehmen (PerlMapToStorageHandler ) oder in deinem Handler die URI abfragen und ggf die verlangte Datei ausliefern. M.E wäre das erste das sauberere Vorgehen.

Rolf Schaufelberger
(habe mal wieder mein Login vergessen...)

<< >> 6 Einträge, 1 Seite



View all threads created 2007-05-06 14:48.