van wamp naar lamp server
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:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<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>
# 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?
(afhankelijk van het type PHP-installatie)
Wat doet dit?
Mogelijk daarna nog even Apache restarten.
Gewijzigd op 03/11/2020 12:31:49 door - Ariën -
Toevoeging op 03/11/2020 12:38:44:
- Ariën - op 03/11/2020 12:28:54:
enabled
Check je error_log van Apache eens?
waar vind ik die???
Vaak daarin de map /httpd, maar soms ook /Apache2 of iets dergelijks.
Het ligt een beetje aan de distributie en de versie.
Kijk anders eens naar
Linux is erg krachtig, als het om zoeken gaat ;-)
Gewijzigd op 03/11/2020 13:05:53 door - Ariën -
[Tue Nov 03 11:20:17.597144 2020] [php7:warn] [pid 6096] [client 127.0.0.1:54734] PHP Warning: include(): Failed opening '/content/home.php' for inclusion (include_path='.:/usr/share/php') in /var/www/html
Wat ik zie is dat het pad /usr/share/php aangeroepen wordt. In de usr/share heb ik de folders php7.4-common, php7.4-json, php7.4-mysql, php7.4-opcache, php7.4-readline. Géén enkel php.
Gewijzigd op 03/11/2020 13:13:02 door tortuga web
Dat is enkel een map waar hij bepaalde configuratie ook kan zoeken.
In jouw geval zal /content/home.php niet bestaan, of de foute rechten hebben.
Betreft de rechten???
Ik heb de rechten voor de /var/www map aangepast met $ sudo chown -R username /var/www
Moet ik nog iets meer doen?
Gewijzigd op 03/11/2020 13:24:33 door tortuga web
Hebben de bestanden dezelfde owners en chmod-rechten?
Maar ik snap nog niet zo goed, waarom de andere niet werkt. Dit is wat ik heb:
In de indexpagina van de site, dus in de root van de site:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
if (!isset($_GET['page'])) {
//url-variabele bestaat niet, geef beginpagina
include('content/home.php');
}
else {
//url-variabele bestaat wel, definieer bestand
$page = 'content/'.$_GET['page'].'.php';
if (file_exists($page)) {
//pagina bestaat, laat zien
include($page);
}
else {
//pagina bestaat niet
echo 'De opgevraagde pagina bestaat niet.';
}
}
?>
if (!isset($_GET['page'])) {
//url-variabele bestaat niet, geef beginpagina
include('content/home.php');
}
else {
//url-variabele bestaat wel, definieer bestand
$page = 'content/'.$_GET['page'].'.php';
if (file_exists($page)) {
//pagina bestaat, laat zien
include($page);
}
else {
//pagina bestaat niet
echo 'De opgevraagde pagina bestaat niet.';
}
}
?>
In de submap 'content' heb ik de verschillende pagina's aangebracht, dus dat deel van de pagina's dat wijzigt. In de index zijn header, menu en footer als steeds terugkomend gedefinieerd.
Ik zou niet weten hoe het zou kunnen dat owners of chmod-rechten anders zijn.
Hoe staat je document_root ingesteld?
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
Gewijzigd op 03/11/2020 14:22:52 door - Ariën -
zou dat niet /var/www/html/websitename moeten zijn?
Gewijzigd op 03/11/2020 14:33:14 door tortuga web
Gewijzigd op 03/11/2020 14:39:04 door - Ariën -
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.
Gewijzigd op 03/11/2020 14:50:50 door - Ariën -
In ieder geval, hardstikke bedankt voor de hulp, ben al veel verder weer.
Is goed! Succes!
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.