Apache: Variable für AliasMatch manipulieren? Bzw: warum klappt AliasMatch nicht

WulfmanGER

Commander
Registriert
Juli 2005
Beiträge
2.225
Hallo zusammen

LEIDER hab ich eine etwas kuriosere Kombination aus Apache+Calibre [mit PW-Schutz]+ProxyPass+OPDSClient@Android (MoonReader) die einen doofen Fehler bringt. Der Client ruft den content via Proxy bei Calibre ab, mit einer ZWEITEN Session ruft er die Thumbnails auf - diese Session ist aber nicht authorisiert (htauth) - somit produziert mir das ganze 401/Unauthorized (nur bei den Thumbs, sämtliche anderen Funktionen klappen). Logisch. Warum das so ist, weiß ich allerdings nicht. Da ich vermutlich der einzige mit diesem Problem bin, lohnt jetzt auch nicht die beiden Entwickler (Calibre und dem Client) heiß zu machen ;). Selbst ist der Mann :)

Ich hab für die Calibre-Datenbank ein kleines PHP-Script geschrieben ("Technik-Studie"). Vorteil: hier hab ich alle Thumbnails auf meinem Webserver liegen - die könnte ich jetzt dem OPDS-Client zum Verarbeiten übergeben:

Dieser Pfad wird vom Android-Client aufgerufen: /ebooks/get/thumb/6190/Verwaltung
und produziert einen 401.

Es gibt noch diesen Pfad: /ebooks/get/thumb/6190/Verwaltung?sz=105x140
Dieser wird bei Nutzung via Browser genutzt und der darf NICHT berührt werden - Funktioniert einwandfrei. Sobald nach Verwaltung etwas kommt, darf es nicht matchen...

Dieser (Web)Pfad /buecherdatenbank/thumbs/150px/6/6190.png
verweist auf das Thumbnail meines Webservers. Da will ich hin (statt (...)/6190/Verwaltung )

Mit
Code:
AliasMatch /ebooks/get/thumb/(.*)/Verwaltung$ "C:/Win/Pfad/www/buecherdatenbank/thumbs/150px/6/$1.png"
hätte ich die halbe Miete (wobei da irgendwo noch ein andere Fehler drin ist :/). Dummerweise hab ich die Thumbs nicht alle in EINEM Verzeichnis sondern um das ganze ein wenig zu splitten markiert die erste Zahl des Dateinamens (6190.png also die 6) das Verzeichnis.

Und das bekomme ich nicht angesprochen. Kann ich in der Apache-Konfig ein Befehl setzen der (.*) ausliest und die erste Zahl in eine Variable schreibt und mir Quasi aus einer Variablen 2 macht?

Mein Plan B wäre:
Code:
AliasMatch /ebooks/get/thumb/(.*)/Verwaltung$ "C:/Win/Pfad/www/buecherdatenbank/thumbs/calibre_php.php?id=$1"
=> calibre_php.php... diese .php liest von $id die erste Stelle aus und lässt dann das png entsprechend darstellen. Das ganze klingt aber gerade bei größeren Suchergebnissen im OPDS-Client nach etwas mehr Last ;) Daher mein Plan B. Zudem ist in dem Alias ein Fehler den ich nicht finde ... 403 bekomme ich hier. AliasMatch liegt in einem vhost und der vhost hat ein <directory> welches C:/Win/Pfad/www/ als WebRoot definiert; sollte doch eigentlich reichen [der vhost klappt ansonsten - da liegen noch mehrere Scripte drauf)

Wie bekomme ich mein Problem also in den Griff? Hat hier jemand eine Idee?

ProxyPass sieht übrigens wie folgt aus (folgt nach dem AliasMatch - Reihenfolge tauschen bringt aber nichts)
Code:
<Location /ebooks/>
#ALT: ProxyPreserveHost On
ProxyPreserveHost Off
ProxyPass http://127.0.0.1:8080/ebooks/
ProxyPassReverse http://127.0.0.1:8080/ebooks/
</Location>
[/code ]

Ich vermute mal das ich bei AliasMatch irgendwas übersehe - Google bringt mir aber immer nur das gleiche Schema für AliasMatch - da kann ich meinen Fehler nicht raus ableiten ...

Danke schon mal
 
Wulfman_SG schrieb:
Und das bekomme ich nicht angesprochen. Kann ich in der Apache-Konfig ein Befehl setzen der (.*) ausliest und die erste Zahl in eine Variable schreibt und mir Quasi aus einer Variablen 2 macht?
Du nimmst zwei RegEx-Matches. In deinem Fall besser mit \d (Digit) als mit . (Wildcard).
Code:
AliasMatch "^/ebooks/get/thumb/(\d)(\d+)/Verwaltung$" "C:/Win/Pfad/www/buecherdatenbank/thumbs/150px/$1/$1$2.png"

Case-sensitive URIs sind IMHO auch immer so eine Sache ...
Wäre eine case-insensitive ReGex nicht sinnvoller?
Code:
AliasMatch "(?i)^/ebooks/get/thumb/([^\/])([^\/]+)/Verwaltung$" "C:/Win/Pfad/www/buecherdatenbank/thumbs/150px/$1/$1$2.png"
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: WulfmanGER
Also das erste Alias-Match funktioniert grundsätzlich (beim zweiten will der Apache nicht mehr starten), aber das Problem ist: <Location> überschreibt es scheinbar.

Folgendermaßen sieht es jetzt aus:

Code:
AliasMatch "^/ebooks/get/thumb/(\d)(\d+)/Verwaltung$" "C:/Win/Pfad/www/buecherdatenbank/thumbs/150px/$1/$1$2.png"

<Location /ebooks/>
#ALT: ProxyPreserveHost On
ProxyPreserveHost Off
ProxyPass http://127.0.0.1:8080/ebooks/
ProxyPassReverse http://127.0.0.1:8080/ebooks/
</Location>

So geht die Thumb-Abfrage weiter durch den Proxy und ich bekomme somit ein 401. Lösche ich Location, sehe ich das AliasMatch allerdings funktioniert.

Selbst wenn ich das AliasMatch nach Location schiebe, geht es nicht. Location>AliasMatch ...

AliasMatch ist in Location auch nicht erlaubt :(

Location kann ich leider nicht näher "spezifizieren" (also Location /apps/ebooks/irgendwas/ ). ProxyPass muss ab /ebooks/ einsetzen..


EDIT: Fehler/Lösung gefunden


Code:
<Location /ebooks/get/thumb/>
ProxyPass !
</Location>

das muss an "dritter" stelle stehen. Damit wird die URL aus dem ProxyPass rausgenommen.
1) AliasMatch
2) Location mit ProxyPass ...
3) Location mit "ProxyPass !" (also der Proxy-Ausnahme)

Vielen Dank für den RegEx!
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: floTTes
Zurück
Oben