[Apache] Mod_rewrite vraag

Pagina: 1
Acties:

  • smeerbartje
  • Registratie: September 2006
  • Laatst online: 07:12
Ik wil leren om te gaan met de Apache module "mod_rewrite". Hiervoor ben ik bezig om mijn eigen redirect-script te maken. Ik heb een .htaccess bestand aangemaakt dat er als volgt uit ziet:

code:
1
2
RewriteEngine on
RewriteRule ^to/([^/\.]+)/?$ index.php?target=$1 [L]


Alles staat in de volgende directory: /wwwroot/projects/test. Mijn doel is dus om deze url [/wwwroot/projects/test/to/rogier] door te laten verwijzen naar [/wwwroot/projects/test/index.php?target=rogier]. Dit werkt nu goed. Echter, als ik het met een volledige URL probeer, dan gaat het mis en verschijnt onderstaande foutmelding Waarom? Kan iemand mij een hint in de goede richting geven?

code:
1
The requested URL /projects/test/to/http://www.google.com was not found on this server.


Het gaat mis als de // erin komen. Zo ver was ik al :)

[edit]
Voor mensen die willen proberen:

Het 'standaard' werkend script
http://nijmegen.lommers.org/projects/test/to/DITISEENTEST

Werkt niet omdat er een URL mee wordt gegeven.
http://nijmegen.lommers.o.../to/http://www.google.com

[ Voor 26% gewijzigd door smeerbartje op 05-01-2007 11:04 ]


  • DizzyWeb
  • Registratie: Februari 2001
  • Laatst online: 14:49

DizzyWeb

Ondertiteld

Wat bedoel je precies met die paden... en wat bedoel je met "en volledige url"?

  • NLChris
  • Registratie: Juli 2004
  • Laatst online: 15:31
[b][message=27242755,noline]smeerbartje schreef op vrijdag 05 januari 2007 @ 11:01
code:
1
2
RewriteEngine on
RewriteRule ^to/([^/\.]+)/?$ index.php?target=$1 [L]
code:
1
([^/\.]+)/


Ik weet niet veel van RegExp maar volgens mij staat hier dat de string achter to/ geen '/' mag bevatten. En dat zou dan inderdaad mis gaan bij complete urls :)

  • smeerbartje
  • Registratie: September 2006
  • Laatst online: 07:12
Maar eigenlijk wil ik helemaal geen RegExp gebruiken dus :). Voor mijn part wordt alles gewoon netjes 'doorgestuurd' naar de variabele.

  • Mafkees
  • Registratie: Oktober 2003
  • Niet online
code:
1
2
RewriteEngine on
RewriteRule ^to/(.*)$ index.php?target=$1


Zou moeten werken :)

  • smeerbartje
  • Registratie: September 2006
  • Laatst online: 07:12
He top man! Echter niet ALLES wordt goedgekeurd. Als ik bijvoorbeeld een link heb met daarin ook variabelen, dan lukt het niet. Check deze maar:

http://nijmegen.lommers.o...&btnG=Google+zoeken&meta=

  • Mafkees
  • Registratie: Oktober 2003
  • Niet online
En merk ook op dat http:// wordt veranderd in http:/ :P

Maar ik denk dat dat niet werkt vanwege de webserver oid. Die ziet alles na een vraagteken namelijk als argument, gescheiden door ampersands. Mss kun je dat oplossen door iets als dit in je PHP code te zetten:

PHP:
1
2
3
4
5
6
$base_url = "http://nijmegen.lommers.org/projects/test/to/";
if ( isset($_GET["target"]) )
{
    $target = str_replace($base_url, "", $_GET["target"]);
    printf("Redirecting to: %s", $target);
}

Maar 's meer een workaround dan een oplossing.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Waar hoort mijn topic?
[PRG] -> [WSS]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • smeerbartje
  • Registratie: September 2006
  • Laatst online: 07:12
Bedankt voor je moeite, maar helaas. Het helpt niets. $target is nog steeds gevuld met de string tot de variabelen. En inderdaad, de slash had ikzelf niet eens opgemerkt :(

Toch raar dat zoiets niet mogelijk is.

[edit]
Sorry voor het verplaatsen in het verkeerde topic. Ik twijfelde een beetje waarin het thuishoort.

[ Voor 20% gewijzigd door smeerbartje op 05-01-2007 12:43 ]


  • jnr24
  • Registratie: Oktober 2004
  • Laatst online: 12-01 12:59
RewriteRule ^to/(.*) /index.php?target=$1

In je index.php moet je eens proberen om ipv $_GET[target] dit te proberen:

$target = preg_replace('/^target=/','',$_SERVER['argv'][0]));

*edit* dakje voor target, maar misschien werkt dat niet.

[ Voor 69% gewijzigd door jnr24 op 05-01-2007 13:00 ]


  • smeerbartje
  • Registratie: September 2006
  • Laatst online: 07:12
Nope, werkt allemaal niet :(
Dit is nu mijn index.php:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<html>
   <head>
      <title>Redirector</title>
   </head>
   <body>
      <p>
    <?php
    $target = preg_replace('/^target=/','',$_SERVER['argv'][0]);
    echo("bla: ".$target."<br/>");
    
    $base_url = "http://nijmegen.lommers.org/projects/test/to/";
    if ( isset($_GET["target"]) )
    {
        $target = str_replace($base_url, "", $_GET["target"]);
        printf("Redirecting to: %s", $target);
    }
    ?>
      </p>
   </body>
</html>

Misschien is het domweg onmogelijk? Een oplossing is natuurlijk om de url eerst in een database te zetten, een ID eraan te hangen en vervolgens een header("location"); te doen... niet de mooiste oplossing vind ik zelf.

  • jnr24
  • Registratie: Oktober 2004
  • Laatst online: 12-01 12:59
Mmmmm

probeer eens [QSA] achter je RewriteUrl ??

Anders:

Kan je URL decoden? ik bedoel als je de link zelf met php neerzet dan doe je

print "http://blabla/to/".urlencode("http://google.com/?q=dit&en=dat");

Je kan ook nog de interne codering van rewrite gebruiken.

RewriteMap codeer int:escape
RewriteUrl ^to/(.*) index.php?target=${codeer:$1}

die moet je in PHP misschien weer 'urldecode'-en.

  • smeerbartje
  • Registratie: September 2006
  • Laatst online: 07:12
Maar dat interne coderen, kan deze wel een 'parameter' met variabelen aan? Met andere woorden: codeert deze module "http://google.com/?q=dit&en=dat" goed zodat phpurldecode() deze weer kan decoderen en ik vervolgens een header aan kan spreken?

Als dit wel het geval is, waarom gaat het met de rewriteRule dan niet goed?

[edit]
Net even de manual bekeken en volgens mij moet het hiermee wel lukken. Ik kan alleen niet vinden hoe ik deze functie nu aan moet roepen in mijn htaccess.

[ Voor 26% gewijzigd door smeerbartje op 05-01-2007 14:24 ]


  • jnr24
  • Registratie: Oktober 2004
  • Laatst online: 12-01 12:59
Hmmmm het zou best kunnen dat het alleen in de httpd.conf kan, dat had ik pas ook ergens.

  • jnr24
  • Registratie: Oktober 2004
  • Laatst online: 12-01 12:59
En die [QSA] werkt ook niet?

  • smeerbartje
  • Registratie: September 2006
  • Laatst online: 07:12
Redelijk, check maar. De slashes zijn nog steeds niets goed en het ?-teken is vervangen door een &-teken :)

  • Mafkees
  • Registratie: Oktober 2003
  • Niet online
Mijn scriptje was fout. In plaats van

PHP:
1
$target = str_replace($base_url, "", $_GET["target"]);


moet je gebruiken:

PHP:
1
$target = str_replace($base_url, "", $_SERVER["REQUEST_URI"]);

Anders heeft 't weinig zin... alleen ik zie dat het topic in WSS staat en de headers van je server ook aangeven dat het een Windows server is dus ik weet niet zeker of REQUEST_URI wel bestaat... in het verleden (toen ik nog op windows programmeerde :P) bestond die variabele nooit.
Pagina: 1