[htaccess] Slash in rewrite

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • juiced01
  • Registratie: December 2009
  • Nu online
Ik ben bezig met het rewriten van mijn url's en dynamische subdomeinen. De URL's gaan goed. Alles wordt doorgestuurd naar de index.php, en daar wordt uitgezocht wat er moet gebeuren.

Bijvoorbeeld, de url domein.nl/producten/toetsenbord/. De rewrite wordt onder water dan "index.php/producten/toetsenbord/". Prima. In mijn code wordt de juiste content gezocht, werkt allemaal.

Nou heb ik ook dynamische subdomeinen, om de taal te kiezen. http://eng.domein.nl/producten/toetsenbord/ wordt ook naar de index gestuurd, en het subdomein wordt in de url gezet. Wat ik zou willen, is: index.php/producten/toetsenbord/?taal=eng


code:
1
2
3
4
5
6
7
8
9
10
RewriteEngine On 

RewriteCond %{HTTP_HOST} !^www\.domein\.nl$ [NC]
RewriteCond %{HTTP_HOST} ^([a-zA-Z0-9]+)\.domein\.nl$ [NC]
RewriteRule ^(.*)$ index.php?taal=%1&url=%{REQUEST_URI} [L,QSA]


RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1


De bovenste 4 regels wordt:
index.php?taal=eng&url=/producten/toetsenborden/

Wat ik zou willen is:
index.php/producten/toetsenbord/?taal=eng

Wanneer ik regel vijf verander in:
code:
1
RewriteRule ^(.*)$ index.php/%{REQUEST_URI}?taal=%1 [L,QSA]
krijg ik een internal 500 error

Wie kan mij op weg helpen?

Acties:
  • 0 Henk 'm!

  • Exterazzo
  • Registratie: Mei 2000
  • Laatst online: 11:26

Exterazzo

Qeasy

Ik ben geen htaccess guru, maar misschien helpt het om de slash te escapen, dus zo:

code:
1
RewriteRule ^(.*)$ index.php\/%{REQUEST_URI}?taal=%1 [L,QSA]

Audentia


Acties:
  • 0 Henk 'm!

  • juiced01
  • Registratie: December 2009
  • Nu online
Thanks, maar helaas,
code:
1
Internal Server Error

Acties:
  • 0 Henk 'm!

Verwijderd

Waarom lopen mensen toch altijd zo te kloten met mod_rewrite? Waarom rewrite je niet alles naar één PHP script en doe je de rest in PHP code? Die moet die URL's ergens anders in je applicatie toch ook genereren op een of andere manier.

Wat win je ermee om toch per se "taal" en/of "url" als GET variabelen te krijgen?

Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Eens met Cheatah. Vroeger ging ook alles met mod_rewrite maar ik ben blij daar vanaf gestapt te zijn.

March of the Eagles


Acties:
  • 0 Henk 'm!

Verwijderd

Hacku schreef op donderdag 25 maart 2010 @ 22:16:
Eens met Cheatah. Vroeger ging ook alles met mod_rewrite maar ik ben blij daar vanaf gestapt te zijn.
Ik ben absoluut niet tegen mod_rewrite, ik ben tegen domme RewriteRule's.
Om bijvoorbeeld index/news/15 te rewriten naar index.php?section=news&item=15 is gewoon onzin. Als je dat voor elke module moet gaan doen bestaat je applicatie binnen de kortste keren uit tientallen rules die elkaar allemaal in de haren kunnen vliegen.

Zet je je applicatie iets handiger in elkaar, dan is de boel meteen een stuk flexibeler, leesbaarder en minder foutgevoelig. Verplaats deze logica dus naar je applicatie.

Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Ik ben absoluut niet tegen mod_rewrite,
Dat moet je zeker niet zijn, mod_rewrite kan nog steeds handig zijn. We hebben het eigenlijk over:
ik ben tegen domme RewriteRule's.
Daar zijn we het met eens.
Om bijvoorbeeld index/news/15 te rewriten naar index.php?section=news&item=15 is gewoon onzin. Als je dat voor elke module moet gaan doen bestaat je applicatie binnen de kortste keren uit tientallen rules die elkaar allemaal in de haren kunnen vliegen.
Exact, dat was een issue waar ik vroeger tegenaan liep. Punt is, ooit - in een ver verleden - ga je voor de eerste keer leesbare urls gebruiken en kom je uit bij mod_rewrite. Je blijft het gebruiken en na een aantal jaar is dat bestand één bende geworden. Helemaal onhandig en toen niet genoeg over nagedacht.

March of the Eagles


Acties:
  • 0 Henk 'm!

  • juiced01
  • Registratie: December 2009
  • Nu online
Hmm, oke duidelijk :) Maar hoe zouden jullie dan de URL's aanmaken? domein.nl/product/etc/ lijkt me duidelijk. Maar hoe krijg ik die naar mn index.php zonder rewrite? En, als ik een taal meegeef, hoe zou ik dat beter aan kunnen pakken? domein.nl/eng/product/etc/ wordt dan lastig, lijkt me?

Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Zoiets?

code:
1
2
3
4
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [E=CI_PATH:/$1,L]


PHP:
1
2
3
$urlValues = explode ( '/', $_SERVER['REQUEST_URI'] );

var_dump ( $urlValues );

March of the Eagles


Acties:
  • 0 Henk 'm!

  • juiced01
  • Registratie: December 2009
  • Nu online
Oke, dat ziet er goed uit :) En het subdomein kan met
PHP:
1
explode('.', $_SERVER['SERVER_NAME'], 2);

Of hebben jullie daar een beter idee over?

Mijn doel is om de eventuele taalkeuze te achterhalen.Ik zou ook achter elke url bijvoorbeel ?lang=eng kunnen plakken, maar wat vindt een zoekmachine hier bijvoorbeeld van?

[ Voor 36% gewijzigd door juiced01 op 25-03-2010 22:56 ]


Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Dat kan, aangezien je weet dat het subdomein altijd op die plaats zit. Je wil misschien ook wat checks inbouwen (toegestane woorden), en ook even nadenken wat je wil doen wanneer iemand http://domein.nl/ of http://www.domein.nl/ inramt.
Mijn doel is om de eventuele taalkeuze te achterhalen.
Wat bedoel je met achterhalen, kijken uit welk iemand komt?

[ Voor 21% gewijzigd door XWB op 25-03-2010 23:04 ]

March of the Eagles


Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 11-09 13:55
$_SERVER['SERVER_NAME'] bevat de naam van je server, niet die uit het Host-veld in het HTTP-request, en dus niet het domein welke de bezoeker in zijn adresbalk heeft staan.
Daarvoor dien je $_SERVER['HTTP_HOST'] te gebruiken.

Acties:
  • 0 Henk 'm!

  • juiced01
  • Registratie: December 2009
  • Nu online
Hacku schreef op donderdag 25 maart 2010 @ 23:01:
Wat bedoel je met achterhalen, kijken uit welk iemand komt?
Nee, wanneer iemand op 't vlaggetje klikt, wordt de content (en menu-items etc.) voor die taal uit de database gehaald. :) Als de gewone (www. of zonder prefix) URL wordt ingetypt, wordt de standaard taal gekozen.
frickY schreef op donderdag 25 maart 2010 @ 23:06:
$_SERVER['SERVER_NAME'] bevat de naam van je server, niet die uit het Host-veld in het HTTP-request, en dus niet het domein welke de bezoeker in zijn adresbalk heeft staan.
Daarvoor dien je $_SERVER['HTTP_HOST'] te gebruiken.
Ah stom, tuurlijk :)
Pagina: 1