login  Naam:   Wachtwoord: 
Registreer je!
 Forum

.htaccess en RewriteMod

Offline Thomas - 22/10/2005 09:23 (laatste wijziging 22/10/2005 09:26)
Avatar van ThomasModerator Hey, ik ben al een tijdje met search-engine-safe (SES) URL's bezig waarbij ik URL's van de vorm
index.php?mod=hoofdcat&sub=subcat&var1=val1&var2=val2

wil omzetten naar URL's van de vorm
index/hoofdcat/subcat/var1/val1/var2/val2

en met .htaccess de terugvertaling doe.

Dit is mij al gelukt op de volgende manier:

  1. Options +FollowSymLinks
  2. RewriteEngine on
  3.  
  4. # Variabelen, 3 variabelen
  5. RewriteRule index/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)$ /index.php?mod=$1&sub=$2&$3=$4&$5=$6&$7=$8 [L]
  6.  
  7. # Variabelen, 2 variabelen
  8. RewriteRule index/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)$ /index.php?mod=$1&sub=$2&$3=$4&$5=$6 [L]
  9.  
  10. # Variabelen, 1 variabele
  11. RewriteRule index/(.*)/(.*)/(.*)/(.*)$ /index.php?mod=$1&sub=$2&$3=$4 [L]
  12.  
  13. # Geen variabelen, optionele trailing slash
  14. RewriteRule index/(.*)/(.*)(/)*$ /index.php?mod=$1&sub=$2 [L]
  15.  
  16. # Geen variabelen, alleen hoofdmodule opgegeven
  17. RewriteRule index/(.*)(/)*$ /index.php?mod=$1 [L]
  18.  
  19. # Geen variabelen, geen hoofd- of submodule
  20. RewriteRule index(/)*$ /index.php [L]


Maar ik heb nu 2 problemen:
* 1. Voor elk aantal variabele-waarden-paren moet ik een nieuwe RewriteRule maken, terwijl ik eigenlijk iets wil hebben van de vorm

  1. RewriteRule index/(.*)/(.*)(/(.*)/(.*))*$ /index.php?mod=$1&sub=$2&........ [L]


Dus altijd twee keer (.*) voor respectievelijk de hoofdpagina ($_GET['mod']) en de subpagina ($_GET['sub']) waar ik op zit, gevolgd door een willekeurig aantal key-value paren (0 of meer).

Heb ik dus de volgende SES URL:
index/nieuws/main/pagina/1
Dan zou deze vertaald moeten worden naar:
index.php?mod=nieuws&sub=main&pagina=1

Maar ik weet dus niet hoe je je "captured subpatterns" (dus $1, $2, $3 etc.) aan moet spreken met een patroon a la (/(.*)/(.*))*
Ik weet ook niet of dit uberhaupt mogelijk is. Ik heb al iets gezien van mapping-functionaliteit bij rewrite-rules, maar kan hier eerlijk gezegd weinig chocola van maken.

* 2. Omdat ik van de bovenstaande rewrite-rules gebruik maak (één RewriteRule voor elk aantal variabelen dat ik wens door te geven), ben ik beperkt tot 3 variabelen.
Het aantal te "vangen subpatronen" is namelijk volgens mij beperkt tot 10 (eigenlijk 9 - $0 bevat heel je patroon, en $1 tot en met $9 bevatten subpatronen). Voor de 4e variabele zou ik $9 en $10 (wat niet werkt) moeten gebruiken.

Is bovenstaande aanpak trouwens goed, of kan ik van minder $'s gebruik maken?

Ik heb zelf de volgende "oplossing" verzonnen:
Maak een RewriteRule die alle zooi na index/ in één $_GET-variabele gooit, dus als volgt:

  1. RewriteRule index/(.*)$ /temp/index.php?stuff=$0 [L]


En wat ik daarna doe is $_GET['stuff'] exploden op "/", en dat ik vervolgens $_GET opnieuw opbouw (wat natuurlijk ook kan).

Ik weet niet echt of deze laatste oplossing als "netjes" beschouwd kan worden, maar deze werkt verder prima, en heeft maar één rewrite-conditie nodig.

Iemand suggesties?

6 antwoorden

Gesponsorde links
Offline Maarten - 22/10/2005 12:24
Avatar van Maarten Erelid Ik zou persoonlijk naar de 2de oplossing grijpen. Alle zooi in 1 var.
Citaat:
Ik weet niet echt of deze laatste oplossing als "netjes" beschouwd kan worden

Sure, zolang je maar snuggere manier gebruikt om die dingen op z'n plaats te krijgen, maar dat komt wel goed 

Dus moest het van mij afhangen, de laatste genoemde methode, want die biedt je veel meer mogelijkheden.
Offline Dani - 24/10/2005 22:49
Avatar van Dani PHP gevorderde redirect gewoon alles puur naar jouw index.php en je kan in PHP de redirect URL verkrijgen met $_SERVER['REDIRECT_URL'] 
Offline Thomas - 25/10/2005 12:05 (laatste wijziging 25/10/2005 12:07)
Avatar van Thomas Moderator Hm, dat klinkt ook interessant - maak jij al ergens van die methode gebruik?

Wat voor waarde heeft $_SERVER['REDIRECT_URL'] precies? De pagina waar vanuit geredirect wordt?
Offline Dani - 27/10/2005 08:35
Avatar van Dani PHP gevorderde dit wordt momenteel gebruikt (maar op een eerder eenwoudige wijze, moet nog uitgebreid worden) op www.kusthoreca.be

REDIRECT_URL geeft enkel de "submappen"

originele url : www.kusthoreca.be/index/blah/bleh?gvar=123

rewrite url : www.kusthoreca.be/index.php?gvar=123

$_SERVER['REDIRECT_URL'] = '/index/blah/bleh'
$_SERVER['REDIRECT_QUERY_STRING'] = 'gvar=123'
$_SERVER['REDIRECT_STATUS '] = 200
Offline Thomas - 27/10/2005 11:12
Avatar van Thomas Moderator Ja, maar dan ben je nog niet klaar. Je moet dan nog $_SERVER['REDIRECT_URL'] gaan ontleden in je index.php.

In dat opzicht verschilt jouw of mijn methode dus niet veel in termen van hoeveelheid/complexiteit code.

Het is een andere methode om hetzelfde te bereiken .
Offline xSc - 15/07/2006 16:36
Avatar van xSc Onbekend FangorN, ik heb met hetzelfde probleem te maken gehad.

Je kunt natuurlijk ook je .htaccess automatisch aanpassen: je laat een regel toevoegen aan je .htaccess wanneer je een 'extra get gaat nodighebben'.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.464s