[Apache mod_rewrite]

Pagina: 1
Acties:

  • goalgetter
  • Registratie: Juni 1999
  • Laatst online: 25-08 15:24
Hallo,

Ik heb een hele table liggen met mensen die een bepaald subdomein willen laten verwijzen naar een andere lokatie op internet. Nu is het natuurlijk niet de bedoeling om voor elke verwijzing een aparte rewrite te doen.

De volgende code werkt voor 1 subdomein:
code:
1
2
3
RewriteEngine On
RewriteCond %{HTTP_HOST}    ^bladiebla\.domein\.nl$
RewriteRule (.*)        http://domein.nl/path

Via een scriptje wordt momenteel gewoon elke HTTP_HOST afgevangen en via een check in de database geredirect (zonder het gebruik van de mod_rewrite). Dit werkt prima opzich, ware het niet dat het wel heel erg mooi zou zijn om ook via http://sub.domein.nl/dir een direct aanspreekbare alternatieve URL te hebben. Nu krijg je (aangenomen dat die dir niet bestaat op de server waar het scriptje draait) een 404 Document not found.

De oplossing is in theorie heel simpel, ware het niet dat de praktische kant het een beetje laat afweten.

Via een rewrite wil ik de HTTP_HOST afvangen, vervolgens moet ook de REQUEST_URI (het path) afgevangen worden, en moet het geheel gerewrite worden naar een scriptje die van deze 2 variablen een hele mooie redirect kan bouwen.

Waar het fout gaat... Na een hele hoop leeswerk op onder andere deze lokatie ben ik er niet uitgekomen. In feite kom ik uberhaupt geen rewrites van de HTTP_HOST in combinatie met een andere rewrite tegen. Iemand die mij kan vertellen of en hoe dit opgelost kan worden?

  • sebas
  • Registratie: April 2000
  • Laatst online: 16-12-2025
Als ik je goed begrijp wil je met een alternatieve url ook kunnen deeplinken?
code:
1
2
 ReWriteCond %{HTTP_HOST}   ^alternatief.domain.org.*$
 ReWriteRule ^/(.+)      http://nieuw.domain.org/$1 [P,L]

probeer zoiets eens.

Je kunt de pathes ook met environmental vars bouwen.

Everyone complains of his memory, no one of his judgement.


  • goalgetter
  • Registratie: Juni 1999
  • Laatst online: 25-08 15:24
Jup, ik wil met een alternatieve URL ook kunnen deeplinken.

Enige probleem is dat ik geen zin heb om per alternatieve url (dat zijn er honderden) een entry in mijn .htaccess te maken.

Dus wil ik een "generieke" oplossing die zowel de %{HTTP_HOST} als het path doorpassed naar een php script op een bepaalde lokatie.

Op dit moment draait er alleen een php-script welke de HTTP_HOST zelf bepaald, en dan met behulp van de database de gewenste target URL doorgeeft.
code:
1
2
3
RewriteEngine On
RewriteCond %{HTTP_HOST}    ^[.+]\.domein\.nl$
RewriteRule (.*)        http://path/naar/script/%{HTTP_HOST}$1 [R]

Dit werkt ook niet... Op een of ander emanier bouwt ie er een enorme URL van welke dan niet bestaat (alsof ie in een loop terecht komt).

  • brammetje
  • Registratie: Oktober 2000
  • Laatst online: 12-01-2025
klein ideetje: via php je .htaccess aanpassen met die domeinen uit je db?

  • goalgetter
  • Registratie: Juni 1999
  • Laatst online: 25-08 15:24
Uiteraard heb ik dat meegenomen, maar aangezien alle users ook nog eens op elk moment van de dag hun "target" page kunnen veranderen zou ik dan dus ook een cron job moeten gaan draaien om de veranderingen bij te houden...

Het is een mogelijke oplossing die ik achter de hand houd, maar als het met een "simpele" rewrite in 1x gefixed kan worden waarom zou ik dan de bewerkelijke manier kiezen?

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

Oeh ah, als we toch bezig zijn...

Hoe kan ik het zo maken dat met een willekeurige URL */index.php/blah/whatever extern kan worden gebruikt als */blah/whatever?

Rustacean


  • sebas
  • Registratie: April 2000
  • Laatst online: 16-12-2025
Op dinsdag 07 mei 2002 14:44 schreef Manuzhai het volgende:
Oeh ah, als we toch bezig zijn...

Hoe kan ik het zo maken dat met een willekeurige URL */index.php/blah/whatever extern kan worden gebruikt als */blah/whatever?
Dat staat dus boven, raadpleeg de handleiding en je komt er uit.

Everyone complains of his memory, no one of his judgement.


  • sebas
  • Registratie: April 2000
  • Laatst online: 16-12-2025
* sebas snapt er trouwens steeds minder van. Kun je misschien een uitgebreid voorbeeld geven van wat je nu hebt, wat er uit moet komen en wat het resultaat met de verschillende aanpakken is.

Everyone complains of his memory, no one of his judgement.


  • goalgetter
  • Registratie: Juni 1999
  • Laatst online: 25-08 15:24
Huidige situatie:

subdomein.domein.ext wordt afgevangen door een PHP script (alle subdomeinen behalve www gaan naar een aparte virtualhost container waarvan de default index dit script is). Dit script checkt de HTTP_HOST en selecteerd aan de hand daarvan de juiste target pagina.

Wanneer gaat het fout:

subdomein.domein.ext/directory

De directory bestaat niet, dus wordt er een 404 gegeven (script wordt niet aangesproken dus geen redirect)

Het uiteindelijke doel:

subdomein.domein.ext
subdomein.domein.ext/directory

moet via een Rewrite uitkomen op een php pagina die één of twee variablen krijgt. Bijv. : www.domein.ext/vhost.php?host=[http_host]&dir=[dir]

Wat wil ik niet:

een .htacces file met voor elk subdomein een entry gezien het feit dat er honderden entries zijn. (Als het echt niet gaat lukken houden we deze mogelijkheid achter de hand).

Ik hoop dat het nu duidelijk is :)

  • sjoerdb2
  • Registratie: Juli 2001
  • Laatst online: 09-05-2025
Kan je niet iets proberen met multiview?

  • goalgetter
  • Registratie: Juni 1999
  • Laatst online: 25-08 15:24
Multiviews bedoel je?

Dan moet je alsnog zorgen dat alles bij dat php script komt, en op het moment dat je daar een vast domein in zet is je HTTP_HOST weg -> zelfde probleem.

  • Erik Jan
  • Registratie: Juni 1999
  • Niet online

Erik Jan

Langzaam en zeker

Niet echt een mooie oplossing, maar als het toch in een aparte virtualhost draait best te doen en best snel, denk ik:

ErrorDocument 404 script.php

Vervolgens kan je als het goed is script.php gewoon alle omgevingsvariabelen verkrijgen die je ook zou krijgen als de file wel bestaat, dus REQUEST_URI etc. kan je gebruiken om naar het goede bestand te deeplinken.

Edit: info

This can no longer be ignored.


  • goalgetter
  • Registratie: Juni 1999
  • Laatst online: 25-08 15:24
Dat zou een oplossing zijn als het enkel om de HTTP_HOST ging, echter gaat het hier om het path, en die ben je kwijt na zo'n doorstuur actie voor een ErrorDocument.

edit:

Het werkt dus wel. Ik had even een apache config errortje waardoor die errordocument niet uit de htaccess werd gehaald.

Uiteindelijke oplossing is dus een simpel "ErrorDocument 404 /index.php" in de .htaccess waarna in die index.php de environment vars worden uitgelezen.

Allen bedankt voor de tijd en moeite ;)
Pagina: 1