PHP [mod_rewrite]http:// Innerhalb einer Regel

Eagle-PsyX-

Commander
Registriert
Juni 2006
Beiträge
2.208
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...
 
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:
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)?^^
 
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.
 
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.
 
Eagle-PsyX- schrieb:
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:
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:
@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:
Hmm, achso, liegt ja auch nahe dass Du diese einfache Lösung schon benutzt ;)

Siehe mein Edit, vielleicht hilft es Dir ja weiter.
 
Eagle-PsyX- schrieb:
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:
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.
 
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 :-)
 
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'].
 
@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:
Zurück
Oben