PFZ.nl - PHP Community: Modrewrite met meer dan 1 argument gaat niet goed - Systeembeheer - Forum - PFZ.nl - PHP Community

Je kunt niet antwoorden op dit topic
#1 30-01-2012 22:24
  • Ron Rutten
  • Groep: Verenigingsleden
  • Posts: 11
  • Actief sinds: 04-02-2004
Ik heb al een aantal topics en de Wiki hier bekeken, maar heb nog geen oplossing voor het volgende probleem:

Als ik 1 argument ingeef in de url (bijvoobeeld /vereniging) gaat het goed. Voer ik echter 2argumenten in (bijvoorbeeld 'vereniging/bestuur') dan gaat het fout. De CSS, de afbeeldingen etc worden niet meer geladen. Het lijkt dus alsof de pagina dan niet vanuit de root laadt.

Options +FollowSymLinks
Options +Indexes
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^([a-zA-Z_]+)$ index.php?p=$1 [L]
RewriteRule ^([a-zA-Z_]+)/([a-zA-Z_]+)$ index.php?p=$1&sp=$2 [L]

als ik print_r($_GET) doe, zie ik wel de url die ik verwacht.

Kan iemand mij een duwtje in de juiste richting geven?

#2 30-01-2012 22:48
  • Martin P
  • Groep: Moderators
  • Posts: 3645
  • Actief sinds: 19-04-2007

Bekijk Post Op 30-01-2012 23:24 schreef Ron Rutten:

Voer ik echter 2argumenten in (bijvoorbeeld 'vereniging/bestuur') dan gaat het fout. De CSS, de afbeeldingen etc worden niet meer geladen. Het lijkt dus alsof de pagina dan niet vanuit de root laadt.
Is domain.tld/vereniging/bestuur dan de root van je domein? Nee, dat is het niet ;) Wat betreft de browser bevind je je in de map vereniging, dus het klopt dat het lijkt dat de pagina niet vanuit de root laadt.

Oplossing:
- begin de links naar alles met een slash zodat er vanaf de root van het domein wordt gekeken of
- maak gebruik van de <base href="..." />-tag

EDIT:

Bekijk Post Op 30-01-2012 23:24 schreef Ron Rutten:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^([a-zA-Z_]+)$ index.php?p=$1 [L]
RewriteRule ^([a-zA-Z_]+)/([a-zA-Z_]+)$ index.php?p=$1&sp=$2 [L]
Dit gaat overigens nooit goed. Lees maar eens goed hoe een RewriteCond werkt:
The RewriteCond directive defines a rule condition. One or more RewriteCond can precede a RewriteRule directive. The following rule is then only used[...]
De RewriteConds zijn dus alleen van toepassing de opeenvolgende RewriteRule.

Je zult dus voor elke RewriteRule de RewriteConds moeten herhalen. Aangezien dat dubbel werkt is, is het logischer om die regel om te draaien en in te stellen dat er niet herschreven moet worden als het een bestaand bestand of map betreft:
1
2
3
4
5
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

# Hier gewoon alle RewriteRules zonder RewriteConds

De vraag is overigens of je daadwerkelijk wilt dat je mappen toegankelijk zijn? Dit is meestal n.l. niet het geval.

EDIT 2:
Ik verplaats dit topic van Script Request naar Systeembeheer.
Handleidingen zijn er niet voor niets, gebruik ze dus :)
HTML5 ~ CSS ~ PHP ~ MySQL ~ SQL-injectie bestaat meer dan 13 jaar

#3 30-01-2012 23:31
  • Ron Rutten
  • Groep: Verenigingsleden
  • Posts: 11
  • Actief sinds: 04-02-2004
Martin, dank voor jouw reactie. Ik probeer de .htaccess stap voor stap op te bouwen op basis van wat ik online kan vinden. Ik snap wel wat je bedoelt over waarom het fout gaat als ik met 2 argumenten werk, maar ik zie nog niet goed hoe ik dat dan moet aanpassen.

Jouw 2e opmerking over de mappen. Ik heb bijvoorbeeld in de www-root een map /vereniging. Daarin staat de files index.php, bestuur.php, beleid.php etc. Op basis van het eerste argument (?p=vereniging) wil ik dat de index.php uit de bijbehorende directory wordt getoond. Dat gaat ook goed. Stuur ik een tweede argument mee (bijvoorbeeld /vereniging/bestuur) dan wil ik dat de file /vereniging/bestuur.php wordt getoond. Alles files uit de subdirectories worden overigens ge-included in de index.php in de root-directory.

De rewriteConditions betreffende de mappen gebruik ik waarschijnlijk met een verkeerd doel. Ik heb nu subdirectories 'vereniging', 'nieuws' etc. Als ik nu domein.tld/vereniging doe, dan wordt direct de index.php uit die subdirectory getoond. Dat wil ik uiteraard niet. Ik kan dat oplossen door de subdirecties andere namen te geven, maar dat maakt het beheer niet overzichtelijker.

Samengevat: ik ben een newbie met modRewrite maar probeer het te gaan begrijpen.

UPDATE:
Ik vond een tutorial waar met een komma wordt gewerkt tussen de argumenten ipv een slash:

RewriteRule ^([a-zA-Z_]+),([a-zA-Z_]+)$ index.php?p=$1&sp=$2 [L]

Dat werkt, maar ik zie toch andere tutorials waar wel met een / tussen ALLE argumenten wordt gewerkt. Ik ben er nog niet uit waarom dat in mijn geval niet werkt.

#4 31-01-2012 12:23
  • Martin P
  • Groep: Moderators
  • Posts: 3645
  • Actief sinds: 19-04-2007

Bekijk Post Op 31-01-2012 00:31 schreef Ron Rutten:

Martin, dank voor jouw reactie. Ik probeer de .htaccess stap voor stap op te bouwen op basis van wat ik online kan vinden. Ik snap wel wat je bedoelt over waarom het fout gaat als ik met 2 argumenten werk, maar ik zie nog niet goed hoe ik dat dan moet aanpassen.
Met een slash aan het begin van elke link of de <base href /> (zie hierboven).

Bekijk Post Op 31-01-2012 00:31 schreef Ron Rutten:

Alles files uit de subdirectories worden overigens ge-included in de index.php in de root-directory.
Is het dan niet handiger om een mapje met de naam "includes" te maken waar je vervolgens al die bestanden uit die subdirectories in plaatst?

Bekijk Post Op 31-01-2012 00:31 schreef Ron Rutten:

De rewriteConditions betreffende de mappen gebruik ik waarschijnlijk met een verkeerd doel. Ik heb nu subdirectories 'vereniging', 'nieuws' etc. Als ik nu domein.tld/vereniging doe, dan wordt direct de index.php uit die subdirectory getoond. Dat wil ik uiteraard niet. Ik kan dat oplossen door de subdirecties andere namen te geven, maar dat maakt het beheer niet overzichtelijker.
Of ervoor zorgen dat bestaande mappen óók herschreven worden.

Als je mijn voorbeeld neemt, kun je daarin aanpassen dat bestaande mappen ook herschreven worden:
1
2
3
# RewriteCond %{REQUEST_FILENAME} -d [OR] # deze regel weghalen of een # voor zetten, zodat het commentaar wordt
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]
Handleidingen zijn er niet voor niets, gebruik ze dus :)
HTML5 ~ CSS ~ PHP ~ MySQL ~ SQL-injectie bestaat meer dan 13 jaar


Inloggen wachtwoord vergeten? Aanmelden