• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Apache und mod_rewrite Probleme

Ich habe einen Apache-Server laufen. Er ist über http://xx.dyndns.org/ zu erreichen.
Desweiteren läuft das Programm Pyload, welches einen integrierten Webserver mitsich bringt. Diesen kann ich über http://xx.dyndns.org:8000/ erreichen.
Jetzt würde ich ihn aber gern über Port 80 (Apache-Server) erreichbar machen. Sodass er mit http://xx.dyndns.org/pyload/ erreichbar ist.
Dazu verwende ich das Rewrite-Modul. Jedoch funktioniert es nicht korrekt.
Hier der Code:

Code:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteLog rewrite.log
RewriteLogLevel 9
RewriteCond %{REQUEST_URI} /pyload/.*
RewriteRule .*/(.*) http://localhost:8000/$1 [P] [L]
RewriteCond %{HTTP_REFERER} http://localhost/pyload.*
RewriteRule .*/(.*) http://localhost/pyload/$1 [R]
RewriteRule ^/pyload/(.*)$ /$1:8000
</IfModule>


Die Webseite wird Falsch dargestellt und die Links funktionieren auch nicht. Sie laufen immer auf einen 404 Fehler hinaus.


falschb.jpg



Das wurde zum Teil schon hier behandelt, da ich es ursprünglich mit Squid versuchen wollte. Hatte aber auch nicht so wirklich funktioniert.

MfG
 

Beppo

Member
Hallo,

ich bin mir nicht ganz sicher, aber reicht dir nicht ein

Code:
RewriteEngine on
RewriteLog rewrite.log
RewriteLogLevel 9
Redirect /pyload/ http://xx.dyndns.org:8000/
?

Grüße Beppo
 

panamajo

Guru
mod_rewrite funktioniert nur wenn in dem Kontext Änderungen am FileInfo erlaubt sind, das vergisst man gerne und blöderweise findet man in den Logs keinen Hinweis darauf.
Bei openSUSE muss dies explizit erlaubt werden, etwa durch
Code:
AllowOverride All
 
OP
G

gForce1989

Newbie
@Beppo

Somit werde ich auf die Adresse http://xx.dyndns.org:8000/ direkt umgeleitet. Ich möchte aber, dass Apache als Proxy fungiert. Ich kann z.B. von arbeit aus nicht auf den Port 8000 zugreifen. Es ist nur der Port 80 freigegeben.
Es soll auf http://xx.dyndns.org/pyload/ geblieben werden.

@panamajo

Die Anweisung AllowOverride muss in einem Directory stehen. Also habe ich um meine Rewrite-Struktur ein Directory gemacht. Jedoch funktioniert es jetzt überhaupt nicht mehr.

Code:
RewriteLog rewrite.log
RewriteLogLevel 9
<Directory /pyload/>
<IfModule mod_rewrite.c>
AllowOverride All
RewriteEngine on
RewriteCond %{REQUEST_URI} /pyload/.*
RewriteRule .*/(.*) http://localhost:8000/$1 [P] [L]
RewriteCond %{HTTP_REFERER} http://localhost/pyload.*
RewriteRule .*/(.*) http://localhost/pyload/$1 [R]
RewriteRule ^/pyload/(.*)$ /$1:8000
</IfModule>
</Directory>
 

panamajo

Guru
gForce1989 schrieb:
Die Anweisung AllowOverride muss in einem Directory stehen. Also habe ich um meine Rewrite-Struktur ein Directory gemacht. Jedoch funktioniert es jetzt überhaupt nicht mehr.

Code:
<Directory /pyload/>
<IfModule mod_rewrite.c>
AllowOverride All
...
Ich ging davon aus dass die Rewrite Regeln in einer .htaccess Datei stehen. Nur dann ergibt die AllowOverride Direktive Sinn, denn damit definiert man ja welche Einstellungen in .htaccess verwendet werden dürfen.

Wenn du nicht gerade im obersten Verzeichnis des Servers das Verzeichnis /pyload/ hast wundert mich nicht das nichts mehr funktioniert, bei <Directory> muss ein absoluter Pfad (ggf. mit Wildcards) angegeben werden.
 
OP
G

gForce1989

Newbie
Hab es jetzt mit ProxyPass nach langem googlen hinbekommen.

Code:
ProxyRequests off 
ProxyHTMLExtended On

<Proxy *> 
	Allow from all
</Proxy> 

ProxyPass /pyload/ http://localhost:8000/
ProxyHTMLURLMap http://localhost:8000/pyload/ /pyload/

<Location /pyload/> 
ProxyPassReverse /
SetOutputFilter proxy-html
ProxyHTMLURLMap /	/pyload/
ProxyHTMLURLMap /pyload	/pyload/
RequestHeader unset Accept-Encoding
</Location>

Jedoch gibt es noch ein Problem.
Alle Links, welche mit "/" enden funktionieren. Bei denen, die ohne "/" enden, kommt ein 404 fehler und in der Adresse steht z.B. http://xx.dyndns.org/admin/.
Trage ich jetzt nachträglich pyload nach (http://xx.dyndns.org/pyload/admin/) dann funktioniert es.
Wie kann ich es machen, dass Links ,welche ohne "/" enden, auch umgesetzt wird?
Desweiteren funktionieren Java-Scripts auch nicht.
 

Dr. Glastonbury

Advanced Hacker
Hi,
ist jetzt zwar eigentlich ein wenig am eigentlichen Problem vorbei, aber wäre es für dich eine Option den proxy-pass als Subdomain einzurichten und dann eben direkt ins / zu gehen, anstatt /pyload.
Also in deinem Fall erstellst du eben einen VHost mit http://pyload.xx.dyndns.org/ und trägst da als Location / ein. Dann musst du keine Links verändern.
Wie gesagt, ist eigentlich nicht deine Frage, aber würde die Sache evtl. vereinfachen ;)
 
OP
G

gForce1989

Newbie
Das funktioniert leider (glaube ich) bei dyndns nicht. Jedenfalls hab ich es noch nicht gefunden, dass man sich subdomaines erstellen könnte.
 

Dr. Glastonbury

Advanced Hacker
Ah,
ja bin mir nicht ganz sicher, obs immer noch geht, aber wenn du in die dd-client-config noch ein wildcard=yes hinzufügst, dann geht das ;)
Kann aber sein, dass das nur geht, wenn du noch einen alten Account hast; inzwischen ham die ja einiges geändert. Bei mir funktioniert es allerdings definitiv so!
 
OP
G

gForce1989

Newbie
Mit dd-client-config meinst du eine Config-Datei auf meinem Server!?
Ich habe Dyndns in meinem Router konfiguriert.

Bei dyndns gibt es die Option Wildcard. Jedoch steht da, "only for DynDNS Pro users".
Also ist es wohl eher nicht mehr möglich, jedenfalls als free user.
 

Dr. Glastonbury

Advanced Hacker
gForce1989 schrieb:
Bei dyndns gibt es die Option Wildcard. Jedoch steht da, "only for DynDNS Pro users".
Also ist es wohl eher nicht mehr möglich, jedenfalls als free user.
Jo, genau - die ddcleint.config. Aber evtl. geht das eben tatsächlich nicht mehr und ich hab nur einen alten Account noch, wo das eben geht :/
 
OP
G

gForce1989

Newbie
Gänge das mit ner 2. Hostadresse auch?
Sozusagen, dass ich per http://xx2.dyndns.org/ auf nen 2ten Virtuellen Host des Apaches zugreife, der mich dann zu pyload umleitet, und mit http://xx.dyndns.org/ auf dem 1ten?
 

Dr. Glastonbury

Advanced Hacker
Ja klar,
kannst ja beliebige VHosts in deinem Apache konfigurieren - völlig egal, ob das jetzt Subdomains oder ähnliches ist ;)
 

marce

Guru
gForce1989 schrieb:
Code:
ProxyPass /pyload/ http://localhost:8000/
ProxyHTMLURLMap http://localhost:8000/pyload/ /pyload/

Jedoch gibt es noch ein Problem.
Alle Links, welche mit "/" enden funktionieren. Bei denen, die ohne "/" enden, kommt ein 404 fehler
mach doch einfach mal den / am Ende der URL weg...

JS und anderes macht bei sowas durchaus mal Probleme - lösen lassen sie sich manchmal, es gibt div. Hacks und Optionen, wie man da was machen kann...
 
Oben