mboost-dp1
Problemer med mod_rewrite (.htaccess)
- Forside
- ⟨
- Forum
- ⟨
- Programmering
Heay,
Jeg er ikke den store haj til mod_rewrite, så jeg har været rundt på nettet og finde lidt scripts som jeg kunne bruge. Jeg har også fået det til at virke, på nær en ting. Det script jeg har fundet (de sidste to linjer) har til formål at redirecte til adressen med www foran hvis man går ind på siden uden www foran.
Mit script ser således ud:
Jeg har deaktiveret koden på siden lige nu, men problemet er at hvis man går ind på f.eks. http://jacobworsoe.dk/overskrift-til-indlaegget-12... så så bliver man redirected til: http://www.jacobworsoe.dk/post.php/?id=12 (som giver en 404)
Er der en der kan gennemskue hvordan man kan rette scriptet, så den beholder den re-writede URL og nøjes med at putte et www foran?
Jeg kan lige tilføje at det virker perfekt på forsiden. Altså hvis man går ind på http://jacobworsoe.dk så bliver man redirected til http://www.jacobworsoe.dk - præcis som man skal :)
Jeg er ikke den store haj til mod_rewrite, så jeg har været rundt på nettet og finde lidt scripts som jeg kunne bruge. Jeg har også fået det til at virke, på nær en ting. Det script jeg har fundet (de sidste to linjer) har til formål at redirecte til adressen med www foran hvis man går ind på siden uden www foran.
Mit script ser således ud:
Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteRule ([0-9]*)/$ post.php?id=$1
RewriteCond %{HTTP_HOST} !^www\.jacobworsoe\.dk$ [NC]
RewriteRule ^(.*)$ http://www.jacobworsoe.dk/$1 [R=301,L]
Jeg har deaktiveret koden på siden lige nu, men problemet er at hvis man går ind på f.eks. http://jacobworsoe.dk/overskrift-til-indlaegget-12... så så bliver man redirected til: http://www.jacobworsoe.dk/post.php/?id=12 (som giver en 404)
Er der en der kan gennemskue hvordan man kan rette scriptet, så den beholder den re-writede URL og nøjes med at putte et www foran?
Jeg kan lige tilføje at det virker perfekt på forsiden. Altså hvis man går ind på http://jacobworsoe.dk så bliver man redirected til http://www.jacobworsoe.dk - præcis som man skal :)
Jeg vil ummidelbart tro problemet er med
Hvis du ønsker at matche et positivt tal er den smarteste måde at gøre det på ofte med [1-9][0-9]*, hvilket betyder at der skal være mindst et ciffer, og det første ciffer må ikke være nul. Desuden tror jeg du burde starte dit udtryk med ^, så hele URLen skal matche.
Så, jeg tror du burde have noget i retning af
([0-9]*)/$Det matcher et vilkårligt antal cifre efterfulgt af en skråstreg. Et vilkårligt antal cifre kan også være nul cifre, så faktisk matcher du alle URLer der ender med /.
Hvis du ønsker at matche et positivt tal er den smarteste måde at gøre det på ofte med [1-9][0-9]*, hvilket betyder at der skal være mindst et ciffer, og det første ciffer må ikke være nul. Desuden tror jeg du burde starte dit udtryk med ^, så hele URLen skal matche.
Så, jeg tror du burde have noget i retning af
^/([1-9][0-9]*)/$Men jeg ved ikke om RewriteBase ændrer på hvordan udtrykket skal se ud, jeg har aldrig brugt RewriteBase.
kasperd (3) skrev:Hvis du ønsker at matche et positivt tal er den smarteste måde at gøre det på ofte med [1-9][0-9]*, hvilket betyder at der skal være mindst et ciffer, og det første ciffer må ikke være nul.
Da han havde brugt intervallet [0-9] tillader jeg mig at antage at han ønsker at tallet kan være 0, han kan derfor (hvis mod_rewrite understøtter det) bruge [0-9]+, som betyder 1 eller flere. Hvis dette ikke er understøttet er det semantisk det samme som [0-9][0-9]* som igen matcher mindst et tal.
Resten af dine pointer er jeg enig i
Nu stod der jo [0-9]*, hvilket f.eks. matcher 10. Man har tit en situation hvor man gerne vil matche 10 men ikke 01. Hvis man ønsker at matche 0 men ikke 01, så bliver udtrykket mere compliceret. Der er naturligvis også mange tilfælde hvor man er ligeglad med om den slags grænsetilfælde matcher eller ej. Man skal bare gøre sig klart, om man ønsker at de matcher.T-Hawk (4) skrev:Da han havde brugt intervallet [0-9] tillader jeg mig at antage at han ønsker at tallet kan være 0
(hvis mod_rewrite understøtter det) bruge [0-9]+Sandsynligvis understøttes det, muligvis skal det skrives som [0-9]\+, det er forskelligt hvornår + skal escapes, og hvornår det ikke skal.
Mange tak for jeres svar. Jeg vil lige prøve det i aften når der forhåbentlig ikke er nogen på siden. Jeg har ikke lige fået lavet et sted jeg kan teste ændringerne, så jeg er nødt til at lave det direkte på siden.
Jeg kan sagtens se hvad I mener, men er problemet ikke at den ikke kalder den "pæne" URL men istedet den rigtige.
Altså at den kalder:
http://www.jacobworsoe.dk/post.php/?id=12
Når den burde kalde:
http://www.jacobworsoe.dk/overskrift-til-indlaegge...
Jeg kan sagtens se hvad I mener, men er problemet ikke at den ikke kalder den "pæne" URL men istedet den rigtige.
Altså at den kalder:
http://www.jacobworsoe.dk/post.php/?id=12
Når den burde kalde:
http://www.jacobworsoe.dk/overskrift-til-indlaegge...
Jace (6) skrev:Mange tak for jeres svar. Jeg vil lige prøve det i aften når der forhåbentlig ikke er nogen på siden. Jeg har ikke lige fået lavet et sted jeg kan teste ændringerne, så jeg er nødt til at lave det direkte på siden.
Jeg vil foreslå dig at lave ændringer til dit site i et udviklingsmiljø du kører lokalt på din egen computer. Jeg kan varmt anbefale XAMPP - http://www.apachefriends.org/en/xampp.html
Når du så har tingene udviklet færdigt uploader du tingene til din host.
Så er problemet løst. Jeg fik (endelig) svar fra ham der havde lavet scriptet og det virkede sku at bytte lidt om på rækkefølgen. Så nu ser det således ud:
Forresten stor tak for at påpege fejlen med at bruge * istedet for +... Jeg prøvede mig lidt frem med nogle af de forslag i kom med og fik det til at virke med ovenstående kode.
Det er super fedt at f.eks. denne adresse giver en 404 nu:
http://www.jacobworsoe.dk/koer-en-test-paa-tvaers-...
Er der også en der ved hvordan man kan få den til at returnere en 404 hvis man f.eks. indtaster et id som ikke findes i databasen, f.eks. id=9999 som her:
http://www.jacobworsoe.dk/test-9999/
Jeg har prøvet med denne kode, men det virker ikke helt:
(notfound.php findes ikke på serveren) men det giver vist ikke en helt ægte 404 i forhold til f.eks. Google :)
RewriteEngine on
RewriteBase /
Options +FollowSymLinks
RewriteCond %{HTTP_HOST} !^www\.jacobworsoe\.dk$ [NC]
RewriteRule ^(.*)$ http://www.jacobworsoe.dk/$1 [R=301,L]
RewriteRule ([0-9]+)/$ post.php?id=$1
Forresten stor tak for at påpege fejlen med at bruge * istedet for +... Jeg prøvede mig lidt frem med nogle af de forslag i kom med og fik det til at virke med ovenstående kode.
Det er super fedt at f.eks. denne adresse giver en 404 nu:
http://www.jacobworsoe.dk/koer-en-test-paa-tvaers-...
Er der også en der ved hvordan man kan få den til at returnere en 404 hvis man f.eks. indtaster et id som ikke findes i databasen, f.eks. id=9999 som her:
http://www.jacobworsoe.dk/test-9999/
Jeg har prøvet med denne kode, men det virker ikke helt:
if($rows == 0) { HEADER("Location: http://www.jacobworsoe.dk/notfound.php"); } ELSE {
(notfound.php findes ikke på serveren) men det giver vist ikke en helt ægte 404 i forhold til f.eks. Google :)
Corholio (8) skrev:Jeg vil foreslå dig at lave ændringer til dit site i et udviklingsmiljø du kører lokalt på din egen computer. Jeg kan varmt anbefale XAMPP - http://www.apachefriends.org/en/xampp.html
Når du så har tingene udviklet færdigt uploader du tingene til din host.
Og mange tak for det foreslag. Det er allerede sat op :)
#8 & 10
Generelt har jeg meget svært ved at se pointen i der Apache+PHP+MySQL bundler.
1) Hvis ikke man kan installere Apache, PHP og MySQL separat så tvivler jeg på at ens applikation er noget værd.
2) Ved at installere selv og forstå opsætningen er man langt bedre udrustet til at troubleshoote eventuelle problemer.
Generelt har jeg meget svært ved at se pointen i der Apache+PHP+MySQL bundler.
1) Hvis ikke man kan installere Apache, PHP og MySQL separat så tvivler jeg på at ens applikation er noget værd.
2) Ved at installere selv og forstå opsætningen er man langt bedre udrustet til at troubleshoote eventuelle problemer.
Jace (9) skrev:Er der også en der ved hvordan man kan få den til at returnere en 404 hvis man f.eks. indtaster et id som ikke findes i databasen, f.eks. id=9999 som her:
http://www.jacobworsoe.dk/test-9999/
Jeg har prøvet med denne kode, men det virker ikke helt:if($rows == 0) { HEADER("Location: http://www.jacobworsoe.dk/notfound.php"); } ELSE {
(notfound.php findes ikke på serveren) men det giver vist ikke en helt ægte 404 i forhold til f.eks. Google :)
Hvorfor giver det ikke en "ægte" 404? Men du kan jo lade den redirecte til din fejl-side, som du så kan lade sætte response code 404:
header("HTTP/1.0 404 Not Found");
arne_v (11) skrev:
1) Hvis ikke man kan installere Apache, PHP og MySQL separat så tvivler jeg på at ens applikation er noget værd.
At konfigurere et hosting setup har sjældent noget at gøre med værdien af en applikation. Det har (som du selv nævner) altid været en god ide at ha' kendskab til sit hosting setup, men det er langt fra en nødvendighed.
arne_v (11) skrev:
2) Ved at installere selv og forstå opsætningen er man langt bedre udrustet til at troubleshoote eventuelle problemer.
Sandt, men i visse tilfælde har man alligevel ikke adgang til opsætningen af server-apps (webhoteller, etc). Så kan det være ligegyldigt med den viden. Jeg ville ikke investere i en dedikeret maskine til min personlige hjemmeside (det er for dyrt i hosting), så hellere bruge en 20-50 kr's (pr/mnd) ting.
Corholio (13) skrev:At konfigurere et hosting setup har sjældent noget at gøre med værdien af en applikation.
Hvis evnerne ikke rækker til at konfigurere de nævnte servere, så rækker evnerne næppe heller til at lave en god web app.
Corholio (13) skrev:Sandt, men i visse tilfælde har man alligevel ikke adgang til opsætningen af server-apps (webhoteller, etc). Så kan det være ligegyldigt med den viden.
Selvom man ikke har adgang til at ændre dem kan man skam godt have stor nytte af at vide at de eksisterer.
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.