mboost-dp1

PHP og mod_rewrite


Gå til bund
Gravatar #1 - Tang
14. jan. 2011 13:44
Jeg er ved at udvikle en ny hjemmeside i php, hvor jeg bla. vil bruge mod_rewrite til at styre url'en. Nedenunder er en simpel udgave af det script jeg har skrevet, som jeg dog har nogle problemer med.

.htaccess

RewriteEngine on
RewriteRule ^(.+)/$ index.php


index.php

<?php
$str = preg_replace("'/'", "", $_SERVER['REQUEST_URI'], 1);
$exp = explode("/", $str);

for($x = 0; $x < count($exp); $x++)
echo $exp[$x].'<br />';
?>


Problemet er, hvis jeg f.eks. vil skrive domain.dk/test, så skal der ligge en mappe i roden med navnet "test".

Er dette meningen, eller er der en måde at undgå det på?
Gravatar #2 - fidomuh
14. jan. 2011 13:50
#1

Du kan ikke rewrite en tekststreng, som allerede ligger i mappen.
Apache, fx, vil altid tage din mappe/fil foer din rewrite.

Og hvad er det du proever paa?
RewriteRule ^(.+)/$ index.php


skal da vaere:
RewriteRule ^(.+)/$ index.php?arg1=$1


No? :)
Gravatar #3 - Tang
14. jan. 2011 13:58
#2

Formålet er, at uanset hvad der står efter domain.dk, så skal index.php kaldes. Så klare php-koden i index.php resten...
Gravatar #4 - fidomuh
14. jan. 2011 14:04
Saa fjern / foran $.
Bare have ^(.+)$..

Saa skulle den gerne bare kaste alt til index.php.

Hvad staar der i $_SERVER[REQUEST_URI]?
print_r($_SERVER[REQUEST_URI]);

Please :)
Gravatar #5 - Tang
14. jan. 2011 14:13
#4

Mange tak. Det virkede efter at jeg fjernede /
Gravatar #6 - zin
14. jan. 2011 21:19
Du kunne også bare kun bruge mod_rewrite.
Hvis de peger ned i domain.dk/lortrjhy895037t89ergj eller domain.dk/gjhfrjdegh/ så får du en 404, ikke?
Det kan mod_rewrite filtrere på. Jeg havde fornyligt samme problem, og løste det sådant:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/(.*) / [L,R]

På denne vis bliver alt, hvad der skrives efter domain.dk (medmindre der findes en fil eller en mappe) fjernet og omskrevet til domain.dk.
Dette vil dog ikke virke på f.eks. 403'ere.
Gravatar #7 - fidomuh
14. jan. 2011 22:31
#6

Hm, smart :)
Men vil den saa lave om i SERVER[REQUEST_URI]?
Gravatar #8 - zin
15. jan. 2011 05:00
#7: Det tror jeg. Så vidt jeg forstår fortæller den direkte browseren at det er en redirect (moved - 3xx), som Browseren så samler op og laver om i URL'en. :-)
Gravatar #9 - KaW
20. jan. 2011 09:04
Er det ikke coolere at have en decideret url-handler i PHP-koden? Jeg har lidt prøvet at undersøge hvordan sådan en fætter ser ud i PHP, men har ikke rigtigt kunne finde nogen.

Jeg har også prøvet at kigge på Drupal, og hvordan de gør det, men har gåvet lidt op.

Nogen idéer?
Gravatar #10 - zin
20. jan. 2011 12:20
#9: Umiddelbart ville jeg skrave så meget af URL'en som muligt i Apache og derefter evt. specificere med PHP.
Gravatar #11 - fidomuh
20. jan. 2011 12:38
#9

Den mest populaere (og elegante imo) metode, er at bruge simple strukturer.

Og huske at *ALLE* paths, som ikke er til deciderede SQL INSERT eller UPDATE, skal vaere linkable. :)
Gravatar #12 - fidomuh
20. jan. 2011 12:43
w00t
Jeg glemte da et eksempel :D

http://gaypron.dk/path/to/yourmom/ <-- fx :)

Eller som paa newz.dk/~fidomuh :)
Gravatar #13 - KaW
20. jan. 2011 13:01
zin (10) skrev:
#9: Umiddelbart ville jeg skrave så meget af URL'en som muligt i Apache og derefter evt. specificere med PHP.

Binder du dig så ikke ret meget til Apache og mod_rewrite? Jeg tænkte mest på muligheden for senere at flytte til Lighttpd eller NGINX.

Hvis det var PHP'en der legede url-handler, så var det ligemeget med server-softwaren.
Gravatar #14 - zin
20. jan. 2011 13:10
#13: Jo, en del. Men det er jo et valg man træffer. :)
Desuden vil det være langt mere effektivt at gøre det på denne måde.
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login