Door het gebruik van VirtualDocumentRoot zijn we verplicht om een RewriteBase toe te voegen aan onze .htacces. Anders worden de URL's niet op een correct manier herschreven door mod_rewrite
.
Maar als je dit zelfde project in een andere directory structuur gebruikt, dan moet de RewriteBase ook aangepast worden, anders worden de URL's verkeerd herschreven. De .htaccess file zit echter steeds ook in het versie beheer, dus dezelfde code base gebruiken in verschillende directory structuren zorgt hierdoor voor problemen.
Een eenvoudige oplossing is het verwijderen van .htaccess uit het versie beheer, maar dit is niet werkbaar om bij te houden als er een nieuwe release moet gemaakt worden (.htaccess in alle verschillende directory structuren opsporen en wijzigingen aanbrengen waar nodig...)
Daarom zoeken we een alternatieve manier om dit op te lossen.
In de test case hebben we volgende directory structuur opgezet die een versimpelde versie is van het geen we mee werken:
/local/www/paashaas.dev
└── html
├── .htaccess
└── index.php
/local/www/kerstman.dev
└── html
└── paashaas -> /local/www/paashaas.dev/html
/local/www/users.dev
└── user13
└── site
└── project1
└── html -> /local/www/paashaas.dev/html
De originele "codebase" staat onder /local/www/paashaas.dev/html
en is bereikbaar via http://paashaas.dev/. Diezelfde code base wordt ook nog gebruikt in twee andere "sites":
- http://kerstman.dev/paashaas/ → /local/www/kerstman.dev/html/paashaas/
- http://project1.user13.dev/ → /local/www/users.dev/user13/site/project1/html
Deze worden via symbolic links geshared in deze test case, maar dit hoeft daarvoor niet.
Voor het gemak gaan we de 3 test cases ook afkorten naar PAASHAAS, KERSTMAN en USER13.
Werken WEL:
- PAASHAAS (http://paashaas.dev/)
- USER13 (http://project1.user13.dev/)
Werkt NIET:
- KERSTMAN (http://kerstman.dev/paashaas)
Reden waarom dit niet werkt bij KERSTMAN, is doordat in de .htaccess een RewriteBase /
staat, waardoor de url altijd wordt herschreven naar /index.php
. Dit zou in dit geval /paashaas/index.php
moeten zijn.