2 Stimmen

Apache Location-Direktive für dynamische Inhalte schlägt fehl, wenn verschachtelter Pfad

Ich verwende Apache 2.2x. Der meiste Inhalt wird über mod_perl generiert. Es handelt sich also um dynamische Inhalte, die keine Dateisystemzuordnung haben. Perfekte Verwendung von < Location >.

Apache-Konfiguration:

<Location /finance_module1>
  SetHandler perl-script
  PerlResponseHandler Finance::Module1
</Location>

<Location /finance/module2>
  SetHandler perl-script
  PerlResponseHandler Finance::Module2
</Location>

Modul1 funktioniert und wird hier gezeigt, um zu zeigen, dass meine Einrichtung ansonsten funktioniert.

Modul2 funktioniert nicht. Apache sagt "Datei existiert nicht: /home/joe/www/htdocs/finance". Der einzige Unterschied zwischen den Modulkonfigurationen besteht darin, dass der Speicherort von Modul2 mehrere Schrägstriche enthält (was ich einen verschachtelten Pfad nenne).

Über den Fehler "Datei existiert nicht": Natürlich existiert sie nicht - es handelt sich um einen Ort, nicht um eine Datei oder ein Verzeichnis. Warum passiert das also?

Ich würde gerne Pfade mit mehreren Schrägstrichen verwenden können, weil ich viele mod_perl-Module habe und es schön wäre, sie zu Kontrollzwecken zu kategorisieren. Für ein triviales Beispiel könnte die robots.txt einfach sagen:

Disallow: /finance/

In den Apache-Dokumenten heißt es ausdrücklich, dass die < Location >-Direktiven nicht auf das Dateisystem abgebildet werden müssen und sich gut für dynamisch generierte Inhalte eignen.

Was mache ich falsch? Gibt es eine Abhilfe? (Außer dem offensichtlichen "Tu das einfach nicht").

Danke.

3voto

joe Punkte 758

Ich beantworte meine eigene Frage, damit alle anderen, die sich das Gleiche fragen, davon profitieren können.

Kurze Antwort: Verwenden Sie LocationMatch.

Im obigen Beispiel lauten die URLs /finance/module1 und /finance/module2. Mit dem Pfad "finance/" können alle Finance-Handler als Gruppe konfiguriert werden, wenn dies wünschenswert ist.

Zum Beispiel:

<LocationMatch /finance/.*>
  SetHandler perl-script
  PerlAccessHandler foo
</LocationMatch>

<Location /finance/module1>
  SetHandler perl-script
  PerlResponseHandler Finance::Module1
</Location>

<Location /finance/module2>
  SetHandler perl-script
  PerlResponseHandler Finance::Module2
</Location>

0voto

ionFish Punkte 1004

Vielleicht ein kleiner Tippfehler?

<Location /finance_module1>

vs.

<Location /finance/module2>

Ich bin nicht sicher, ob das das Problem ist.

Vielleicht so (zur httpd.conf hinzufügen)

Alias /finance "path-to-files"
<Directory "path-to-files">
  Options +Indexes
  AllowOverride All
  Order allow,deny
  Allow from all
</Directory>

Versuchen Sie dann das Skript. Vielleicht können Sie dort auch einen leeren Ordner anlegen?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X