login  Naam:   Wachtwoord: 
Registreer je!
 Forum

URL herschrijven met MOD_REWRITE ( www.%USERNAME%.example.com ) (Opgelost)

Offline Martijn2008 - 18/03/2009 15:50 (laatste wijziging 18/03/2009 19:28)
Avatar van Martijn2008PHP beginner Hallo allemaal,

Ik wil graag subdomeinen aanmaken voor mijn website. Ik gebruik Apache in combinatie met PHP en MySQL. Ik maak gebruik van MOD_REWRITE om de URL’s wat SEO vriendelijker te maken. Mijn huidige situatie is als volgt:

  1. www.example.com/profile/%USERNAME%


Om bovenstaand URL te realiseren heb ik de volgende RewriteRule geschreven. Deze werkt!

  1. RewriteRule profile/(.*) index.php?act=profile&user=$1 [QSA,L]


Wat ik nu graag zou willen is dat het URL er als volgt uit komt te zien:

  1. www.%USERNAME%.example.com


Kan ik dit bereiken door alleen mijn .htaccess file aan te passen? Of zou ik ook mijn VirtualHost en DNS moeten aanpassen?

Bedankt alvast voor jullie reacties.

Met vriendelijke groet,

Martijn

22 antwoorden

Gesponsorde links
Offline ZG1988 - 18/03/2009 16:30
Avatar van ZG1988 Gouden medaille

überleet
Normaal moet je enkel je .httacces aanpassen aangezien het bij mij toch werkt 

www.%USERNAME%.example.com

is dan hetzelfde als

www.example.com/%USERNAME%
Offline Martijn2008 - 18/03/2009 17:20 (laatste wijziging 18/03/2009 17:20)
Avatar van Martijn2008 PHP beginner Volgens mij gaat dat niet werken, want heb dat al is eerder geprobeerd.
Offline ZG1988 - 18/03/2009 17:34
Avatar van ZG1988 Gouden medaille

überleet
Volgens mij werkt dat wel, aangezien het bij mij werkt?

je moet enkel je rewrite rule aanpassen, maar ik denk dat het dan wel problemen geeft omdat je die eerste variabele ook voor andere paginas gebruikt.
Offline Martijn2008 - 18/03/2009 17:37 (laatste wijziging 18/03/2009 20:23)
Avatar van Martijn2008 PHP beginner Heeft iemand misschien een voorbeeld? Zou handig zijn  !

Ik weet namelijk niet zoveel van MOD_REWRITE.
Offline Jas_per_post - 18/03/2009 20:49
Avatar van Jas_per_post JS interesse Ik ben er niet heel erg in thuis, maar het staat mij bij dat je wel een wildcard-entry in je DNS moet hebben. Maar nogmaals, ik weet het niet zeker.
Offline Martijn2008 - 18/03/2009 21:52 (laatste wijziging 18/03/2009 22:13)
Avatar van Martijn2008 PHP beginner Dat klopt, daar heb je helemaal gelijk in, die staat trouwens bij mij ook aan =)!

Maar weet iemand hoe ik die RewriteRule moet schijven:D?
Offline Jas_per_post - 18/03/2009 22:53
Avatar van Jas_per_post JS interesse Werkt dit?

  1. RewriteCond %{HTTP_HOST} ([^.]+)\.example.com [NC]
  2. RewriteRule /profile/%1
Offline Martijn2008 - 18/03/2009 23:00
Avatar van Martijn2008 PHP beginner Het werkt niet. Maakt het uit op welke plaats ik het in mijn .htaccess file zet?
Offline Jas_per_post - 18/03/2009 23:34 (laatste wijziging 19/03/2009 00:10)
Avatar van Jas_per_post JS interesse Ik weet het niet zeker, ik werk hier puur vanaf google en het feit dat ik weet regexes in elkaar zitten...

nog een poging:

  1. RewriteCond %{HTTP_HOST} (www\.)?([^.]+)\.example.com [NC]
  2. RewriteRule /profile/%2
Offline Martijn2008 - 19/03/2009 09:19 (laatste wijziging 19/03/2009 10:04)
Avatar van Martijn2008 PHP beginner @Jas_per_post Dat werkt ook niet. Ik vermoed dat ik iets moet aanpassen aan de configuratie van Apache. Mijn wildcard staat in mijn DNS aan en de VirtualHost staat als volgt geconfigureerd:

  1. <VirtualHost *:80>
  2. ServerAdmin webmaster@localhost
  3. ServerName example.com
  4. DocumentRoot /var/www/example/
  5. <Directory />
  6. Options FollowSymLinks
  7. AllowOverride All
  8. Order allow,deny
  9. allow from all
  10. </Directory>
  11. <Directory /var/www/example>
  12. Options Indexes FollowSymLinks MultiViews
  13. AllowOverride All
  14. Order allow,deny
  15. allow from all
  16. </Directory>
  17. ErrorLog /var/log/apache2/error.log
  18. LogLevel warn
  19. CustomLog /var/log/apache2/access.log combined
  20. ServerSignature On
  21. </VirtualHost>


Als ik nu http://martijn2008.example.com in tik, dan komt de site uit de server root tevoorschijn. Dat is niet mijn bedoeling, vandaar ik mij afvraag of het niks met de VirtualHost instellingen te maken heeft.
Offline Wim - 19/03/2009 10:31 (laatste wijziging 19/03/2009 10:32)
Avatar van Wim Crew algemeen Zelf heb ik dit ooit gedaan dmv Google.be: Wildcard DNS. Je host moet dit wel ondersteunen...! Je kan dan de gebruikte domeinnaam (<username.jedomein.ext dus) uitlezen uit de $_SERVER variabele.

Toen heb ik een A-record *.mijndomein.ext moeten maken om alles te laten werken. Zal vanavond even kijken of ik het script nog heb (hoewel ik hier een beetje voor vrees...)
Offline pimvdmolen - 19/03/2009 15:35
Avatar van pimvdmolen Nieuw lid ik heb wat jij wil ook gedaan op www.babynow.nl

je moet zorge dat je catch all insteld op de server (ik heb dit gedaan door het hostingbedrijf te mailen en die regelde dat)
en dan plaats je op de index een code die het subdomein uitleest en dan doorstuurt naar de juiste pagina
Offline Martijn2008 - 19/03/2009 17:18
Avatar van Martijn2008 PHP beginner Catch all? Moet ik dat soms in mijn virtualhost zetten? Welke code heb je eigenlijk in je index geplaatst?
Offline Joost - 19/03/2009 17:54 (laatste wijziging 19/03/2009 17:55)
Avatar van Joost PHP expert Met Catch All wordt een DNS entry bedoelt, geloof ik, waarbij een wildcard wordt gebruikt *.domein.nl bv.

De code op de index zou dan zo kunnen zijn:
  1. $ServerName = $_SERVER['SERVER_NAME'];
  2. $Parts = explode(".", $ServerName);
  3. $User = $Parts[0];

Simpel voorbeeldje hoor  
Offline Martijn2008 - 19/03/2009 19:07
Avatar van Martijn2008 PHP beginner Ik vind het nogal apart dat ik de website uit mijn wwwroot zie, en niet de site uit de submap example(zie mijn VirtualHost configuratie; vorige pagina). Ik tik het volgende URL in www.%USERNAME%.example.com
Offline Joost - 19/03/2009 19:21 (laatste wijziging 19/03/2009 19:42)
Avatar van Joost PHP expert
Martijn2008 schreef:
Ik vind het nogal apart dat ik de website uit mijn wwwroot zie, en niet de site uit de submap example(zie mijn VirtualHost configuratie; vorige pagina). Ik tik het volgende URL in www.%USERNAME%.example.com
Niet zo vreemd, je stuurt immers alle requests door naar je DocumentRoot 
Ik gebruik daarvoor VirtualDocumentRoot, in deze structuur:
  1. /vhost/user/domains/domein.nl/www/
  2. /vhost/user/domains/domein.nl/domein/

Waarbij de eerste map (www) een symbolic link is naar de 2e (domein). Dan voeg je deze regel toe in je <VirtualHost> sectie:
  1. VirtualDocumentRoot /vhost/user/domains/domein.nl/%1

Dan kan je subdomeinen aanmaken in de domains map, zeg fotos.
Je kan de map dan bereiken via fotos.domein.nl 

---

Het is echter geen oplossing voor jou probleem. 
Je zult alle requests naar een script moeten sturen, die dan de URL gaat ontleden en de juiste username gebruiken 

Misschien moet je daarvoor:
  1. ServerAlias *.example.com

toevoegen in je VirtualHost sectie, maar ik weet niet zeker of het wel nodig is. 

EDIT:
Je zegt dat alle requests in de wwwroot map komen, dan kan je toch in de index.php wat inbouwen die kijkt of er een username is 'ingevoerd' in de link?

Wil je hem echter herschrijven naar index.php?profile=$p moet je het bij .htaccess zoeken, i.c.m. mod_rewrite 
Offline Martijn2008 - 19/03/2009 19:35 (laatste wijziging 19/03/2009 19:41)
Avatar van Martijn2008 PHP beginner Bedankt Medieval voor jouw uitleg. Ik begin het nu een beetje te begrijpen. Krijg alleen nu wel een error op VirtualDocumentRoot. Enig idee hoe ik dat kan verhelpen?

  1. Invalid command 'VirtualDocumentRoot', perhaps misspelled or defined by a module not included in the server configuration
Offline Joost - 19/03/2009 19:35 (laatste wijziging 19/03/2009 19:41)
Avatar van Joost PHP expert Heb je mod_vhost_alias enabled?

Let wel dat je structuur moet zijn zoals ik beschreef (iig met dat www, domein en symbolic link), want anders gaat het mis 
%1 is namelijk het eerste deel na de http://, dus http://www.domein.nl komt in de www map, en http://domein.nl in de domein map 

EDIT
Hierboven moet de map domein.nl domein zijn, zonder de tld 
Ook in de post hierboven 
Offline Martijn2008 - 19/03/2009 19:43 (laatste wijziging 19/03/2009 19:47)
Avatar van Martijn2008 PHP beginner Alweer een stukje verder, mod Vhosts stond uit ! Mijn config ziet er nu zo uit:

  1. <VirtualHost *:80>
  2. ServerAdmin webmaster@localhost
  3. ServerName *.example.com
  4. VirtualDocumentRoot /var/www/example/
  5. <Directory />
  6. Options FollowSymLinks
  7. AllowOverride All
  8. Order allow,deny
  9. allow from all
  10. </Directory>
  11. <Directory /var/www/example>
  12. Options Indexes FollowSymLinks MultiViews
  13. AllowOverride All
  14. Order allow,deny
  15. allow from all
  16. # This directive allows us to have apache2's default start page
  17. # in /apache2-default/, but still have / go to the right place
  18. # RedirectMatch ^/$ /apache2-default/
  19. </Directory>
  20. ErrorLog /var/log/apache2/error.log
  21. LogLevel warn
  22. CustomLog /var/log/apache2/access.log combined
  23. ServerSignature On
  24. </VirtualHost>


Heb ik je zo goed begrepen of moet ik nog iets aanpassen?
Offline Joost - 19/03/2009 19:51
Avatar van Joost PHP expert Jouw VirtualDocumentRoot is hier gewoon hetzelfde als DocumentRoot.
http://httpd.ap...alias.html

Je ServerName moet gewoon example.com zijn, daaronder zet je dan:
ServerAlias *.example.com
Offline Martijn2008 - 19/03/2009 20:07 (laatste wijziging 19/03/2009 20:08)
Avatar van Martijn2008 PHP beginner Ik heb in mijn VirtualHost de volgende lijntjes code aangepast:

  1. ServerName example.com
  2. ServerAlias *.example.com
  3. VirtualDocumentRoot /var/www/example/main.php?act=redirection&user=%1
  4. DocumentRoot /var/www/example/


Als ik nu ga kijken krijg ik een 404 error.
Offline Joost - 19/03/2009 20:13
Avatar van Joost PHP expert Paar puntjes:

- Je kan geen VirtuaDcumentRoot én DocumentRoot hebben.
- Je VirtualDocumentRoot is geen map.

Zoals ik in die reply al zei, het is geen oplossing voor je probleem, maar voor wat je in de post erboven probeerde.

Ik denk dat er op de eerste pagina's behoorlijk goede uitleg staat over hoe je dit kan realiseren:

Optie 1:
- Je stuurt alle request naar een bepaalde map, waar index.php het afhandelt.

Optie 2:
- Je rewrite met mod_rewrite i.c.m. .htaccess de URL naar een door jou gewenste URL 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.273s