Probleem met htaccess seo vriendelijk!
Ik probeer een htaccess file toe te voegen aan mijn website voor een seo vriendelijke site alleen loop ik vast.
Wat werkt is www.website.nl/entertainment (dit is dan de file entertainment.php)
Maar wat niet werkt is www.website.nl/entertainment/pipo (dit is dan de file item.php). Ik krijg dan een 500 internal error.
Iemand enig idee wat ik niet goed doe?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.website\.nl [NC]
RewriteRule ^(.*)$ https://www\.website\.nl/$1 [L,R=301]
# Als de naam + .php bestaat, mag de regel pas toegepast worden.
RewriteCond %{REQUEST_FILENAME}\.php -f
# Schrijft .php achter de url.
RewriteRule ^(([^/]+/)*[^.]+)$ $1.php [L]
#verwijder .php
#RewriteCond %{THE_REQUEST} \.php
#RewriteRule ^(.*)\.php$ /$1 [R=301,L]
#URL Friendly
RewriteRule ^entertainment/(.*) item.php?url=$1
RewriteCond %{HTTP_HOST} !^www\.website\.nl [NC]
RewriteRule ^(.*)$ https://www\.website\.nl/$1 [L,R=301]
# Als de naam + .php bestaat, mag de regel pas toegepast worden.
RewriteCond %{REQUEST_FILENAME}\.php -f
# Schrijft .php achter de url.
RewriteRule ^(([^/]+/)*[^.]+)$ $1.php [L]
#verwijder .php
#RewriteCond %{THE_REQUEST} \.php
#RewriteRule ^(.*)\.php$ /$1 [R=301,L]
#URL Friendly
RewriteRule ^entertainment/(.*) item.php?url=$1
Wat werkt is www.website.nl/entertainment (dit is dan de file entertainment.php)
Maar wat niet werkt is www.website.nl/entertainment/pipo (dit is dan de file item.php). Ik krijg dan een 500 internal error.
Iemand enig idee wat ik niet goed doe?
En wat zegt de error_log over de de foutmelding?
Erm, bovenstaande htaccess file kan een stuk korter?
Een enkele voordeur voor je applicatie (single point of entry) verdient ook de voorkeur. Dit is meestal /index.php
Vanwaar het onderscheid tussen /entertainment en de rest?
Waarom stuur je niet alles door naar één bestand?
En als het PHP-bestand bestaat, dan stop je verdere verwerking door de rewrite engine.
Een enkele voordeur voor je applicatie (single point of entry) verdient ook de voorkeur. Dit is meestal /index.php
Vanwaar het onderscheid tussen /entertainment en de rest?
Waarom stuur je niet alles door naar één bestand?
En als het PHP-bestand bestaat, dan stop je verdere verwerking door de rewrite engine.
Wat Thomas zegt is inderdaad een goede optie, maar het vergt wel mogelijk een grondige verbouwing van je applicatie, waardoor je jouw index.php ombouwt tot een 'voordeur' in plaats dat je nu met rewrite-rules via diverse ramen van je huis probeert binnen te komen, zoals via je 'entertainment' kamer.
In die single point entry had ik me nog niet verdiept maar kan voor de toekomst zeker een oplossing zijn.
Maar voor nu weet ik niet hoe ik dit probleem kan oplossen.
De file item.php bestaat gewoon en wil dan
www.website.nl/entertainment/pipo (= www.website.nl/item.php?artiest=pipo)
www.website.nl/entertainment/peppi (= www.website.nl/item.php?artiest=peppi)
www.website.nl/entertainment/mamaloe (= www.website.nl/item.php?artiest=mamaloe)
De file haalt dan de gegevens uit de dbase.
Daarnaast heb ik dan een overzicht: www.website.nl/entertainment.php wat nu www.website.nl/entertainment is.
Maar voor nu weet ik niet hoe ik dit probleem kan oplossen.
De file item.php bestaat gewoon en wil dan
www.website.nl/entertainment/pipo (= www.website.nl/item.php?artiest=pipo)
www.website.nl/entertainment/peppi (= www.website.nl/item.php?artiest=peppi)
www.website.nl/entertainment/mamaloe (= www.website.nl/item.php?artiest=mamaloe)
De file haalt dan de gegevens uit de dbase.
Daarnaast heb ik dan een overzicht: www.website.nl/entertainment.php wat nu www.website.nl/entertainment is.
Gewijzigd op 20/04/2020 15:50:49 door Kees Mulder
Wat zegt de error_log? Dat lijkt mij het interessantste als je aangeeft dat je een error 500 krijgt.
Op het moment dat je van RewriteRules gebruik gaat maken loont het misschien ook de moeite om de PHP-bestanden waar in de RewriteRules naar verwezen wordt buiten de webdirectory te trekken ten einde botsingen tussen "virtuele paden" en fysieke bestanden te voorkomen, tenzij de PHP-bestanden dus een bestaandsrecht hebben in de webdirectory.
De enige PHP-bestanden die dan in principe in de webdirectory horen zijn dan dus je single point of entry (/index.php) en eventuele standalone scripts die je af en toe uitvoert om bepaalde taken uit te voeren.
Mogelijk kom je met de bovenstaande .htaccess in een oneindige loop terecht, omdat je heen en weer pingpongt tussen een aanroep met en zonder .php-extentie. Ook is dit mogelijk een "lek" wat uitgebuit kan worden om jouw webserver op de knieën te krijgen.
Heb je toevallig in jouw netwerktab al gekeken hoe vaak je geredirect wordt? Overigens is het niet nodig om voor een (interne) verwijzing/mapping een (externe) redirect te doen. Dit kan rechtstreeks en hoeft niet, en zou niet uit hoeven te monden in een extra request.
De enige PHP-bestanden die dan in principe in de webdirectory horen zijn dan dus je single point of entry (/index.php) en eventuele standalone scripts die je af en toe uitvoert om bepaalde taken uit te voeren.
Mogelijk kom je met de bovenstaande .htaccess in een oneindige loop terecht, omdat je heen en weer pingpongt tussen een aanroep met en zonder .php-extentie. Ook is dit mogelijk een "lek" wat uitgebuit kan worden om jouw webserver op de knieën te krijgen.
Heb je toevallig in jouw netwerktab al gekeken hoe vaak je geredirect wordt? Overigens is het niet nodig om voor een (interne) verwijzing/mapping een (externe) redirect te doen. Dit kan rechtstreeks en hoeft niet, en zou niet uit hoeven te monden in een extra request.
Gewijzigd op 20/04/2020 16:12:20 door Thomas van den Heuvel




