Toon posts:

[apache/php] mod_rewrite

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een probleem met mijn mod_rewrite regels in apache in de .htaccess, ik kom er niet uit ik heb hier al enkele dagen mee zitten knoeien , verschillende tutorials gevolgd maar ik kom er niet uit, wat ik zou willen:

Mijn pagina's zijn opgebouwd als volgt: http://domain.com/index.php?language=NL&page=page1

dit zou ik willen herschrijven naar http://domain.com/NL/page1

hiervoor dacht ik de volgende rule te gebruiken in m'n .htaccess:

PHP:
1
2
RewriteEngine on
RewriteRule ^([^/\.]+)/([^/\.]+)/?$ /index.php?language=$1&page=$2 [L]


Problemen waar ik tegenop bots:

-Als ik nu surf naar domain.com/NL/page1 dan is mijn hele css opmaak verdwenen, terwijl als ik surf naar domain.com/index.php?language=Nl&page=page1 dan klopt alles wel mooi
-de taal en pagina is in principe optioneel, wordt deze parameter niet ingevuld dan wordt deze in de code voorzien van een standaard waarde, echter wanneer ik surf naar http://domain.com/page1 (want taal is optioneel) dan krijg ik een 404, hoe maak ik zoiets optioneel of gaat dat niet ?

thnx!

Verwijderd

Verwijderd schreef op dinsdag 29 december 2009 @ 17:56:
-Als ik nu surf naar domain.com/NL/page1 dan is mijn hele css opmaak verdwenen, terwijl als ik surf naar domain.com/index.php?language=Nl&page=page1 dan klopt alles wel mooi
Dat is logisch als je relatieve URL's gebruikt. De URL's van de stylesheets zijn dan relatief aan het pad dat in de URL staat. In jouw geval zou de stylesheet dus beschikbaar moeten zijn via /NL/pat/naar/je/stylesheet. Gebruik absolute URL's of bepaal het juiste pad naar de stylesheets.
-de taal en pagina is in principe optioneel, wordt deze parameter niet ingevuld dan wordt deze in de code voorzien van een standaard waarde, echter wanneer ik surf naar http://domain.com/page1 (want taal is optioneel) dan krijg ik een 404, hoe maak ik zoiets optioneel of gaat dat niet ?
Ik begrijp wel waarom iedereen altijd ee pad wil omschrijven naar GET parameters, maar eigenlijk is dat helemaal niet handig. Zorg ervoor dat alle URL's via één PHP script gaan, en verwerk alle logica in je PHP code. Het is dan wel handig om bijvoorbeeld een paar directories uit te sluiten door een RewriteCond te gebruiken, bijvoorbeeld /template/ voor stylesheets, afbeeldingen, javascript, etc. En bijvoorbeeld /content/ voor geüploade content in een CMS.

Op deze manier scheelt het je een hoop gedoe.

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Wat Cheatah zegt dus.

En je hoeft je URLs inderdaad niet om te schrijven naar GET parameters. Stuur alles door naar één PHP script en gebruik bijvoorbeeld $_SERVER['PATH_INFO'] of $_SERVER['REQUEST_URI'] om de URL van je script te achterhalen.

Die splits je vervolgens op de / en je bouwt dan je eigen GET-achtige array met variabelen op.

  • Styxxy
  • Registratie: Augustus 2009
  • Laatst online: 08:50
Of voeg onderstaande twee regels toe:
code:
1
2
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

Deze regels zorgen ervoor dat je URL niet wordt gerewrite indien het bestand(/map) bestaa(t)(n).

Verwijderd

Styxxy schreef op dinsdag 29 december 2009 @ 20:55:

Deze regels zorgen ervoor dat je URL niet wordt gerewrite indien het bestand(/map) bestaa(t)(n).
Dat is het probleem hier niet :z

  • Styxxy
  • Registratie: Augustus 2009
  • Laatst online: 08:50
Verwijderd schreef op dinsdag 29 december 2009 @ 21:16:
[...]

Dat is het probleem hier niet :z
Dat was toch het eerste probleem dat hij heeft? Tenzij ik natuurlijk het probleem compleet verkeerd heb begrepen...

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1