Proxyscript. Denkanstöße

Hallo.
Ich bin gerade dabei ein Proxyscript zu schreiben, aber ich komme nicht weiter bzw. habe zwei Probleme.

  1. Stylesheets und Bilder werden nicht geladen.
  2. Wie muss die preg_replace Regel lauten, um aus meineurl.de/?url=http://xzy.ab/ zu machen.

Grüße,
Sebastian

Skript vergessen:

preg_replace ("#^http://(\w|\d)*.([a-z]){2,3}$#i", ‘http://deineurl.de/?url=http://\1.\2’);

könnte genügen
wenn du nun noch die verzeichnisangaben/parameter hinter mit willst vielleicht am besten ne positive look behind assertion nach slash

Du kannst dir doch auch in fertigen Skripten Anregungen suchen :wink:
phpproxies.com/

ich nehme an href’s, rel’s und src’s etc. behandelst du auch? [size=85](immerhin gibts relative Links)[/size]
Schwierig wirds dann bei Scripten :smiley: Ich würd eigl. etwas nehmen was es schon gibt und eben auch funktioniert^^ Bringt ja nichts das Rad ständig neu zu erfinden [size=85](wobei “erfinden” übertrieben ist… das rundes rollt sieht man doch^^)[/size]

Wobei ich allerdings eine gute Idee in Verbindung mit Sessions habe. Wenn man das Proxy Skript nämlich so aufruft:
http://SESSION_ID.proxydoxy.tld
Muss man nur alle Vorkommnisse der echten Domain ändern, relative Pfadangaben funktionieren dann “einfach so”

hast auch wieder recht… hatte nen Denkfehler drin was relatives betrifft :smiley:
Das brauch man natürlich net ersetzten^^ [size=85](eben je nachdem wie mans macht)[/size]

Wobei ich allerdings eine gute Idee in Verbindung mit Sessions habe. Wenn man das Proxy Skript nämlich so aufruft:
http://SESSION_ID.proxydoxy.tld
Muss man nur alle Vorkommnisse der echten Domain ändern, relative Pfadangaben funktionieren dann “einfach so”[/quote]
kannst mir das näher erläutern? ich weiß grad nicht, was du meinst.

grüße,
sebastian

Naja, man muss an das Proxyskript einige Daten überreichen:
-Die Zieldomain
-Der URL-Pfad
-Der Query-String

Andererseits muss das Dokument verändert werden, damit auch alle Links und ähnliches an das Proxyskript weitergeleitet werden.

Wenn man statt einer Adresse in der Form proxydoxy.tld?url=http://xzy.de/abc.html eine Adresse in der Form xyz.de.proxydoxy.tld/abc.html verwendet, muss man relative Pfadangaben nicht modifizieren.

da stellt sich mir dann aber die frage, wie ich von einem formular auf die seite verweisen kann, da man den pfad ja immer mit angeben muss.

edit:
wie muss denn die htaccess aussehen, um das zu realisieren?

RewriteEngine On RewriteRule ^(^[\.lenzy\.bplaced\.net/])\.lenzy\.bplaced\.net/testumgebung/(.+)$ index.php?domain=$1&path=$2 [L]

geht nicht

Du musst den HTTP_HOST mittels PHP bearbeiten:

.htaccess:

RewriteEngine On
RewriteCond %{HTTP:Host}!=www.lenzy.bplaced.de
RewriteCond %{HTTP:Host}!=lenzy.bplaced.de
RewriteRule .* index.php [E=ORIGIN_URI:%{REQUEST_URI},QSA]

PHP:

$tld = "lenzy.bplaced.de";

$domain = substr($_SERVER['HTTP_HOST'], 0, -strlen($tld));
$path = $_SERVER['ORIGIN_URI'];
$query_string = $_SERVER['QUERY_STRING'];

So in etwa, wenn ich mich nicht täusche :wink:

danke :slight_smile:
leider bekomm ich da nen internen error.

joa die .htaccess hat nen paar gravierende Fehler :smiley:
Glaube die Server Variable heißt anders, “!=” ist eigl nen " !" und der Host müsste nicht escaped werden da es ja nen RegEx ist^^ Also statt “.” nen “.”

Allerdings glaube ich man braucht die .htaccess eh net… via PHP sollte man auch so den Host, Request Uri etc. einsehen können ohne weiteres^^

Um zu wissen welchen $_SERVER Index du brauchst kannst du entweder die php.net Manual konsultieren oder aber einfach mal schauen was in der so drin ist :stuck_out_tongue:

<?php header('Content-Type: text/plain'); print_r($_SERVER); ?>

Red keinen Müll :ps:

Dann schau nach

Nein, wenn man != verwendet, ist es kein RegEx mehr

Natürlich, aber glaubst du dass der Server jede Anfrage automatisch auf index.php weiterleitet?

das ganze klappt.
leider muss ich das so schreiben (auskommentiert):

RewriteEngine On #RewriteCond %{HTTP:Host}!=proxy.lenzy.bplaced.de RewriteRule .* index.php [E=ORIGIN_URI:%{REQUEST_URI},QSA]

So müsste es klappen:

RewriteEngine On
RewriteCond %{HTTP_HOST} !=proxy.lenzy.bplaced.de
RewriteRule .* index.php [E=ORIGIN_URI:%{REQUEST_URI},QSA]

es geht. danke :slight_smile: :slight_smile: :slight_smile:
ich hab an meinem skript jetzt auch noch nen fehler. die while schleife führt sich unendlich lang aus. was hab ich falsch gemacht. ich seh den fehler nicht.

Du machst nichts mit $new_url und $url, d.h. du rufst immer $url auf, und wenn das dann 301 zurückgibt hast du deine Endlosschleife.

super. danke.
ich werde jetzt erst mal alleine weitermachen und wenn ich fragen hab, meld ich mich wieder.

grüße,
sebastian

Red keinen Müll :ps: [/quote]im Prinzip hatte ich recht :stuck_out_tongue: Zumindest gibts verschiedene Wege und deine Waren mir nicht so bekannt^^ Allerdings das Leerzeichen war dennoch falsch :smiley: [size=85](ok war dann aber nur 1 Fehler bzw. 2x der selbe)[/size]

Dann schau nach[/quote]brauch ich net… wobei ichs dennoch getan hab :wink:
Ich meinte: %{HTTP_HOST}
deines ist zwar ebenso richtig wie ich gemerkt habe, jedoch gehe ich mal davon aus das die Variable, extra von Apache dafür gesetzt, bevorzugt werden sollte.

Nein, wenn man != verwendet, ist es kein RegEx mehr[/quote]genau genommen wenn man „=“ nutzt^^ Das „!“ ist immer gleich. Jedenfalls hab ich hier gepfuscht :smiley: Das es „=“ gibt war mir iwie bekannt aber auch doch net…
Jedenfalls dürfte es ohne RegEx schneller sein.

Natürlich, aber glaubst du dass der Server jede Anfrage automatisch auf index.php weiterleitet?[/quote]Auch da hab ich gepfuscht :smiley: Hatte nur überflogen weshalb ich dachte es geht nur um das setzen der REQUEST_URI die PHP eigl. sowieso hat^^ Daher unnötig :stuck_out_tongue:
Für das interne umleiten auf die index.php muss natürlich eine .htaccess genutzt werden, da hast du recht.

Ich hätte es vermutlich so gemacht:
.htaccessRewriteEngine On RewriteCond %{HTTP_HOST} !^(www\.)?domain\.tld$ RewriteRule .* index.php
index.php<?php header('Content-Type: text/plain'); echo substr($_SERVER['HTTP_HOST'],0,strrpos($_SERVER['HTTP_HOST'],'.',-6)); echo "\n"; echo $_SERVER['REQUEST_URI']; echo "\n"; ?>allerdings funktioniert das nur bei ner Domain… bei ner Subdomain wie hier bei bplaced müsste man das Script tatsächlich anpassen und z.B. das Minus um die Länge der Subdomain erhöhen. [size=85](also der Third Level Domain / Namen der Subdomain)[/size]
Auch funktionierst bei 1/2 stelligen Domains ebenfalls net… denn das Offset musste so gewählt werden das auch .com und .info möglich sind was bei ner .de 1 bzw. 2 stellen zu viel wäre :wink:

[quote=“White-Tiger”]
Ich hätte es vermutlich so gemacht:
.htaccessRewriteEngine On RewriteCond %{HTTP_HOST} !^(www\.)?domain\.tld$ RewriteRule .* index.php
index.php<?php header('Content-Type: text/plain'); echo substr($_SERVER['HTTP_HOST'],0,strrpos($_SERVER['HTTP_HOST'],'.',-6)); echo "\n"; echo $_SERVER['REQUEST_URI']; echo "\n"; ?>[/quote]

Das würde ich an deiner Stelle wirklich noch mal überprüfen, da ich mir ziemlich sicher bin, dass mod_rewrite mittels Veränderung der Variablen wie REQUEST_URI arbeitet, weswegen ich dann die alte als Umgebungsvariable an PHP weitergegeben habe.