Apache (Ubuntu) Rewrite optimieren?

Lars

New Member
Guten Morgen,
ich habe eine Frage zum Rewrite unter apache. Worab ein paar Infos. Ich bin kein WebAdmin, muss mich aber mit der Technik beschäftigen. Ich habe unter Ubuntu 22.04 den apache 2.4.52 installiert und eingerichtet. Dieser läuft auf https und stellt wfs und wms Daten eines Mapserver bereit. Bis hierher passt alles.

Ein Link zu einem wfs-Dienst sieht z.B. so aus:

Ein wms-Dienst:

Ich möchte im speziellen den Pfad zur MapDatei entfernen. Das funktioniert über SetEnv. Allgemein möchte ich aber den Link allgemein freundlicher gestalten:


Ich habe sehr viele Rewrite-Regeln getestet. z.B.:
RewriteEngine on
RewriteRule ^/dienste/wfs/pois?$ /cgi-bin/mapserv?map=/data/maps/pois.map[QSA,PT,L]

Der Dienst war aber nicht erreichbar. Funktioniert hat es aber so:

Alias /dienste/wfs/pois /usr/lib/cgi-bin/mapserv
<Location /dienste/wfs/pois>
SetHandler cgi-script
Options ExecCGI
SetEnv MS_MAPFILE /data/maps/pois.map
</Location>

Ich müsste diesen Eintrag jetzt aber für jeden Dienst neu machen. Wenn ich später 50 Dienste habe, wie verhält es sich mit der Leistung des apache? Bricht die ein? gibt es vielleicht eine elegantere Lösung?

Gruß
 
Allgemein zu RewriteRule: es nimmt einen URL-Pfad als Regex entgegen
Das ^/dienste/wfs/pois?$ bedeutet folgende Pfade zu fangen
/dienste/wfs/pois
/dienste/wfs/poi

Du wolltest wohl eher das:
RewriteRule ^/dienste/wfs/pois/?$ /cgi-bin/mapserv?map=/data/maps/pois.map[QSA,PT,L]

^/dienste/wfs/pois/?$ fängt
/dienste/wfs/pois
/dienste/wfs/pois/
 
Hallo und danke für deine Antwort.
also ich möchte, wie oben beschrieben, aus den Diensten einfachere URL´s machen. Ich verstehe deine Ausführungen nicht so ganz.

du schreibst:

> Du wolltest wohl eher das:
> RewriteRule ^/dienste/wfs/pois/?$ /cgi-bin/mapserv?map=/data/maps/pois.map[QSA,PT,L]

Da hatte ich ja geschrieben, dass der Link dann nicht zu erreichen war. Im Log wurde nichts hinterlegt.
 
Code:
    <IfModule rewrite_module>
        RewriteEngine On
        RewriteBase "/"
        RewriteRule "^/?dienste/wfs/(.*)/?$" "/cgi-bin/mapserv?map=/data/maps/$1.map" [L,QSA]
        RewriteRule "^/?dienste/wms/(.*)/?$" "/cgi-bin/mapserv?map=/data/maps/$1.map" [L,QSA]
    </IfModule>
 
Ich verstehe deine Ausführungen nicht so ganz.
Die bezogen sich drauf, dass du beherzigen solltest, erst mal zu lernen, die korrekte Regex für eine ReweriteRule zu schreiben.
Nichts für ungut. Aber Regex und Rewrite, das ist Grundwissen der Webserverkonfiguration.

Mein Fehler, dir nicht gleich eine komplette Lösung gegeben zu haben, ohne dass du verstehen musst, was am Regex falsch war.
Aber Joe lieferte dir ja, völlig horizontale Lernkurve, eine Lösung.
Viel Erfolg weiterhin.
 
Last edited:
Die bezogen sich drauf, dass du beherzigen solltest, erst mal zu lernen, die korrekte Regex für eine ReweriteRule zu schreiben.
Nichts für ungut. Aber Regex und Rewrite, das ist Grundwissen der Webserverkonfiguration.
Mein Fehler, dir nicht gleich eine komplette Lösung gegeben zu haben. ohne dass du verstehen kannst, was am Regex falsch war.
Ja, sorry. Ich lerne noch :(
 
Das kommt davon, wenn nicht alle relevanten Informationen geliefert werden...

Code:
    <IfModule rewrite_module>
        RewriteEngine On
        RewriteBase "/"
        RewriteRule "^/?dienste/wfs/(.*)/$" "/cgi-bin/mapserv?map=/data/maps/$1.map" [L,PT,QSA]
        RewriteRule "^/?dienste/wms/(.*)/$" "/cgi-bin/mapserv?map=/data/maps/$1.map" [L,PT,QSA]
    </IfModule>
[7code]

Wenn das nicht hinhaut, dann musst Du Dir das halt mit AliasMatch, LocationMatch und SetEnvIf selbst zusammenbasteln (die offizielle Dokumentation https://httpd.apache.org/docs/current/en/ hilft), darauf habe ich jetzt keine Lust...
 
Back
Top