PHP [mod_rewrite]http:// Innerhalb einer Regel

Eagle-PsyX-

Lt. Commander
Dabei seit
Juni 2006
Beiträge
1.984
Hi,

vielleicht stehe ich auf dem Schlauch, aber wie bekomme ich einen folgenden Link hin:
domain.com/http://www.google.de/ ?

Geht es überhaupt mit dem Doppelpunkt?
Mein Ansatz sieht so aus:
PHP:
RewriteRule ^(.*)/$ index\.php?goal=$1 [L]
RewriteRule ^http://(.*)/$ index\.php?goal=$1 [L]
führt aber zu einem Fehler...
 

volcem

Lieutenant
Dabei seit
Dez. 2007
Beiträge
1.020
Erlaubt Apache das escapen? Das schnelle nachschlagen in der Manuell führt zu keinen Erfolg...

wäre es eine Option das einfach so zu lösen:

Code:
domain.de/url/http://google.de


PHP:
RewriteRule ^url/([^/].*)?/?$ /index.php?goal=$1/ [L]

?
 
Zuletzt bearbeitet:

Eagle-PsyX-

Lt. Commander
Ersteller dieses Themas
Dabei seit
Juni 2006
Beiträge
1.984
Hi,
ich kriege leider nur ein HTTP Statusmeldung 403 = Zugriff verweigert!
Wäre interessant von welchem Ordner der da Spricht, vom Ziel-Verzeichnis? (google.de)?^^
 

ice-breaker

Commodore
Dabei seit
Nov. 2008
Beiträge
4.133
Eagle, dein Ansatz funktioniert mit der ersten Rule schonmal nicht, da jeder Request auf der index.php?goal Seite landet, diese aber auch wieder auf die Regel zutrifft und du dich somit in einer Endlos-Rekursion befindest.

Vllt solltest du genauer erklären was du erreichen möchtest, das ist meist der deutlich sinnvollere Weg.
 

Eagle-PsyX-

Lt. Commander
Ersteller dieses Themas
Dabei seit
Juni 2006
Beiträge
1.984
Unsinn, das führt zu keiner Rekursion sondern funktioniert problemlos.
domain.com/afuroeg/ wird nach: domain.com/index.php?goal=afuroeg geleitet.
Wo siehst du hier eine Rekursion?

Die erste Regel geht nur mit solchen URLs:
domain.com/www.google.de/
Dann erhalte ich über $_GET['goal'] den Wert www.google.de

Es sollte aber auch:
domain.com/http://www.google.de/ gehen, damit
ich den Wert über $_GET['goal'] dann logischerweise http://www.google.de

Und genau hier ist das Problem. Ich nehme an, dass man nicht ohne url-codierung einfach den Doppelpunkt akzeptiert bekommt.
 

ice-breaker

Commodore
Dabei seit
Nov. 2008
Beiträge
4.133
Zitat von Eagle-PsyX-:
Unsinn, das führt zu keiner Rekursion sondern funktioniert problemlos..

Jup, hab die Rule nicht richtig gelesen, was ein kleines Zeichen alles ändert :D
Dein Browser schickt die Daten url-encodiert an den Server, muss es dir in der Adresszeile aber nicht zeigen, ich vermute mal sehr stark, dass es auch url-encodiert am Server ankommt, falls ":" nach dem RFC wirklich nicht erlaubt ist (gerade keine Zeit nachzusehen)

Versuch es doch mal mit einer RewriteRule im URL-Kontext und mit REQUEST_URI.
 
Zuletzt bearbeitet:

volcem

Lieutenant
Dabei seit
Dez. 2007
Beiträge
1.020
Hmm ich glaube dass http:// ist wohl nicht valid und führt immer zu einem Fehler.

Und wenn Du einfach www.google.de nutzt?

Code:
RewriteRule url/(.*)/ index.php?goal=$1

Wird zu

Code:
http://www.domain.com/url/VALUE/ -> www.google.de

*edit*

Hmm, sind reservierte Zeichen: siehe auch http://www.ietf.org/rfc/rfc2396.txt 2.2
Musste wohl die Zeichen umwandeln und dann wieder zurück...

Vielleicht hilft Dir dass auch weiter:
http://www.dracos.co.uk/code/apache-rewrite-problem/

Hmm so wie ich es gerade raus lesen, könntest Du es vill. mit dem /w ( ([\w:]) ) Operator hinzufügen(Fraglich ob es geht, nicht getestet) oder vielleicht das B-Flag benutzen, wenn man es auf dieses Problem anwenden kann
http://httpd.apache.org/docs/2.2/rewrite/flags.html#flag_b
 
Zuletzt bearbeitet:

Eagle-PsyX-

Lt. Commander
Ersteller dieses Themas
Dabei seit
Juni 2006
Beiträge
1.984
@ice-breaker
Auch ich bin nicht *frisch* in der Branche und hab dein Überlesen befürchtet ;)

@volcem
Danke, aber genau das mache ich schon die ganze Zeit :)
Siehe meine erste Regel, oder direkt online:
http://no-referer.de/www.google.de/

Laut RFC 1945 (HTTP 1.0; Kapitel 3.2.1 [URI]) gehört der Doppelpunkt zu den reservierten Zeichen.
Im RFC 2616 (HTTP 1.1) sieht es auch nicht besser aus. Ich glaube es gibt keine Lösung für das Problem, da der Doppelpunkt allgemein bekannt den Port angibt, egal ob er am Ende oder sonst wo im URI steckt :-/
 
Zuletzt bearbeitet:

volcem

Lieutenant
Dabei seit
Dez. 2007
Beiträge
1.020
Hmm, achso, liegt ja auch nahe dass Du diese einfache Lösung schon benutzt ;)

Siehe mein Edit, vielleicht hilft es Dir ja weiter.
 

ice-breaker

Commodore
Dabei seit
Nov. 2008
Beiträge
4.133
Zitat von Eagle-PsyX-:
Laut RFC 1945 (HTTP 1.0; Kapitel 3.2.1 [URI]) gehört der Doppelpunkt zu den reservierten Zeichen.
Im RFC 2616 (HTTP 1.1) sieht es auch nicht besser aus. Ich glaube es gibt keine Lösung für das Problem, da der Doppelpunkt allgemein bekannt den Port angibt, egal ob er am Ende oder sonst wo im URI steckt :-/
gut ich habe gerade nicht die Lust in dem RFC zu suchen, aber nutzbar ist es auf jedenfall, man achte auf folgenden Wikipedia-Link: http://en.wikipedia.org/wiki/Category:Open_source_database_management_systems

möglicherweise ist der Doppelpunkt wirklich nur auf Ordnerebene nicht anwendbar, da könnte es dann eben vllt funktionieren mit nem RewriteCond zu arbeiten, das werde ich auch gleich mal ausprobieren.

Edit: es wird auf jedenfall nicht auf Windows funktionieren, sondern nur auf Linux (laut Google-Suche), hab aktuell aber auch gerade keine Zeit mehr mir das noch genauer anzusehen
 
Zuletzt bearbeitet:

Eagle-PsyX-

Lt. Commander
Ersteller dieses Themas
Dabei seit
Juni 2006
Beiträge
1.984
Dann bleibt mir wohl vorerst nichts anderes übrig als MediaWiki runterzuladen und zu durchforsten.
Einige Systeme wie Magento z.B. schicken jeden Link direkt zu einer index.php und den Link dann mit PHP analysieren und umzusetzen.
Da ich es aber über die .HTACCESS-Datei machen will bzw. mod_rewrite als solches, werde ich mal hoffen, dass MediaWiki mir antworten liefern kann.
 

volcem

Lieutenant
Dabei seit
Dez. 2007
Beiträge
1.020
Auf der ersten Ebene wird das wohl nicht Funktionieren, auf der zweiten Ebene ist das wohl kein Problem.
Kannst Du ja mal testen, domain.de/ulr/http://xx.de sollte wohl gehen, laut Beiträgen im Internet.

Vielleicht hast Du auch Glück un erfährst wie es im Wiki gelöst ist :-)
 

geodreieck24

Ensign
Dabei seit
Juli 2009
Beiträge
199
Mit folgendem Code funktionieren auch Doppelpunkte auf der ersten Ebene:

PHP:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php
</IfModule>

Deine Adresse bekommst du dann über $_SERVER['REQUEST_URI'].
 

Eagle-PsyX-

Lt. Commander
Ersteller dieses Themas
Dabei seit
Juni 2006
Beiträge
1.984
@geodreieck24
Hey Danke funktioniert ;-)
Muss nur noch den Skript noch etwas umschreiben.

Ergänzung:
Hab es jetzt mal umgesetzt, danke klappt wunderbar:
http://www.no-referer.de/http://www.yahoo.de/

Seltsam. Kann hier eine ungewollte Rekursion entstehen? Eine Rekursion könnte eigentlich doch nur Klient-seitig entstehen... - aber das bügel ich auch mal gleich aus.
 
Zuletzt bearbeitet:
Top