Hallo allemaal.
Een maand geleden ben ik overgestapt van windows naar linux mint. Tot nu toe heb ik mijn webdevelopement nog op de oude windowscomputer gedaan, maar nu wil ik dat ook op mijn linux-machine doen en heb LAMP server geinstalleerd.
Alleen krijg ik nu een probleem dat de links in het menu resulteren in een 'not found' page.
Ik heb een htaccess bestand met de rewrite rules:
<IfModule mod_rewrite.c>
# Tell PHP that the mod_rewrite module is ENABLED:
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# The rest of your rewrite rules here:
RewriteRule ^([^/]+)?$ index.php?page=$1 [QSA,NC,L]
</ifModule>
En ik heb de mod_rewrite in apache geactiveerd.
Op mijn windows comp. werkt dit uitstekend, echter op de linux comp. werkt dit niet.
Andere verschillen zijn:
Windows draait met apache 2.4.35 en PHP 7.2
Linux draait met apache 2.4.41 en PHP 7.4
Iemand enig idee hoe ik de site ook werkend krijg op de linux computer?
Wat bedoel je precies met document_root?
voor zover ik na kan gaan hebben alle mappen maak en verwijder rechten en alle bestanden lees en schrijfrechten. En alles heeft als eigenaar dezelfde user.
Ik bedoel hiermee alles van de sitemap die onder var/www/html/ is ondergebracht
Ai, ja ik had al wel gelezen over virtual hosts, maar dat was me nog net een brug te ver. Dacht dat ik het wel op dezelfde manier kon doen als dat ik het met windows deed.
Weet je toevallig een goede tutorial over het instellen van virtual hosts in linux mint? Ik ben nog steeds een beginner....
Als je zoekt op Apache en VirtualHost dan gaat er een wereld voor je open. Het is puur specifiek voor Apache, en niet iets verschillends per OS, los van de instelbare paden dan.
Op die manier kan je dus verschillende hostnames (zoals www.example.org, example2.org, bladiebla.nl), netjes afhandelen, en elke site een eigen DocumentRoot, error_log, SSL-certificaat etc.. geven.
Het is niet nodig om de pagina aan index.php?page=... te fietsen. Dit zou ik afraden, want op die manier "reserveer" je $_GET['page'] voor dit doel. $_GET zou transparant moeten zijn (tenzij je hier echt een speciale reden voor hebt). Alles wat in $_GET zit zou in principe ook in je querystring te zien moeten zijn. Wil je straks een paginering aanbrengen in een of andere lijst, dan kun je hier "page" ook niet meer voor gebruiken. Je kunt de opgevraagde pagina prima bepalen middels $_SERVER['REQUEST_URI'] (de URL van de oorspronkelijke aanroep), hier heb je geen aparte GET variabele voor nodig.
Ook wordt het misschien tijd om te gaan denken aan een autoloader, en dan liefst een die geen gebruik maakt van disk-operaties zoals file_exists() omdat deze relatief duur zijn.
Dan is include(_once)() niet handig gebleken omdat dit compleet onder de radar doorvloog terwijl het bestand niet gevonden werd. Als een bestand niet gevonden wordt die je probeert in te voegen via include(_once) produceert dit enkel een notice en gaat je programma vervolgens vrolijk verder. Maar als het voor de verdere werking van cruciaal belang is dat dit bestand bestaat (wat bijna altijd het geval is als je iets invoegt) dan kun je beter gebruik maken van require(_once) omdat dit bij het ontbreken een foutmelding produceert en verdere uitvoer stopt. En nog beter zou een autoloader zijn die hier in het geheel geen gebruik van maakt.
En tot slot: zet het melden + weergeven van (alle) fouten aan voor ontwikkeling zodat deze direct op je scherm gedumpt worden. Je wilt niet elke keer als je een wit scherm krijgt in je errorlogs gaan graven, dit gaat heel erg snel vervelen. Soms is het niet te vermijden dat je toch een trip moet maken naar je logs, maar als het direct op je scherm weergegeven kan worden verdient dat toch de voorkeur lijkt mij.