Mod_rewrite (htaccess)

Diskuter andre serversidespråk / -teknologier som J2EE, .htaccess, Progress 4GL, CGI/Perl m.m

Mod_rewrite (htaccess)

Innlegg Sk!ppy » 15.10.2011 19:35

Hei

Har sitti ikveld å surret med dette. (Googlet, kopiert, prøvd, feilet)

Kom fram til:
Kode: Merk alt
RewriteEngine on
RewriteRule ^(.*)/(.*) /index.php?function=$1&file=$2
RewriteRule ^(.*)/(.*)/([0-9]+) /index.php?function=$1&file=$2&id=$3


Som er ganske ikkefungerende.
Den første regelen fungerer fint, men den siste er ikke i orden. Egentlig vil jeg at ID på siste regelen også skal kunne være bokstaver, men da blir det enda mere ødelagt.
"Sk!ppy, Sk!ppy, Sk!ppy the bush kangaroo"
"Client: “You’ll never make any money if you’re always charging for every little thing that you do!”"
Brukerens avatar
Sk!ppy
Medlem
 
Innlegg: 346
Registrert: 05.06.2009 18:32

Re: Mod_rewrite (htaccess)

Innlegg Nukleuz » 15.10.2011 19:49

Kode: Merk alt
Options +FollowSymLinks
RewriteEngine On
RewriteBase /

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^([^/\.]+)/([^/\.]+)/?$ index.php?function=$1&file=$2
RewriteRule ^([^/\.]+)/([^/\.]+)/([0-9]+)/?$ index.php?function=$1&file=$2&id=$3 [N]
Sist endret av Nukleuz den 16.10.2011 8:26, endret 2 ganger.
Mvh
Joachim M. Giæver
http://development.giaever.org
Brukerens avatar
Nukleuz
Seniormedlem
 
Innlegg: 1659
Registrert: 09.12.2006 2:08
Bosted: Tromsø

Re: Mod_rewrite (htaccess)

Innlegg Sk!ppy » 16.10.2011 2:45

Skaper en sinnsyk load på serveren. Den blir helt sjukt treg når jeg har den koden inne, og så tar det litt tid etter jeg har brukt den før farten er normal igjen. (Ikke ser den ut til å fungere heller?)
"Sk!ppy, Sk!ppy, Sk!ppy the bush kangaroo"
"Client: “You’ll never make any money if you’re always charging for every little thing that you do!”"
Brukerens avatar
Sk!ppy
Medlem
 
Innlegg: 346
Registrert: 05.06.2009 18:32

Re: Mod_rewrite (htaccess)

Innlegg Nukleuz » 16.10.2011 8:26

Hei,

Jeg har oppdatert koden nå. Hadde glemt et tegn, og slash foran index.php. Men hvordan ser $file ut?

([^/\.]+) godtar ikke tegnene "/" og "." (punktum),

Mulig du vil fjerne index.php fra URI, og helle bare bruke ?function[..osv].
Mvh
Joachim M. Giæver
http://development.giaever.org
Brukerens avatar
Nukleuz
Seniormedlem
 
Innlegg: 1659
Registrert: 09.12.2006 2:08
Bosted: Tromsø

Re: Mod_rewrite (htaccess)

Innlegg Sk!ppy » 16.10.2011 11:12

Der funket det :)

Hvordan er det mulig å gjøre så id også kan være bokstaver?
Trodde jeg bare trengte å bytte ut ([0-9]+) med ([^/\.]+), men det var visst ikke så enkelt. I tillegg lurer jeg på hva disse betyr/gjør:
Kode: Merk alt
Options +FollowSymLinks

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f


file= og function= inneholder kun bokstaver.
"Sk!ppy, Sk!ppy, Sk!ppy the bush kangaroo"
"Client: “You’ll never make any money if you’re always charging for every little thing that you do!”"
Brukerens avatar
Sk!ppy
Medlem
 
Innlegg: 346
Registrert: 05.06.2009 18:32

Re: Mod_rewrite (htaccess)

Innlegg Nukleuz » 16.10.2011 19:08

Sk!ppy skrev:Der funket det :)

Hvordan er det mulig å gjøre så id også kan være bokstaver?
Trodde jeg bare trengte å bytte ut ([0-9]+) med ([^/\.]+), men det var visst ikke så enkelt.

Kode: Merk alt
RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/?$ index.php?function=$1&file=$2&id=$3 [N]

...skal funke det, fordi
  • ^ betyr "not / or ." innenfor [] (klasser)
  • ^ i starten av reg-exp betyr derimot "starten av strengen"
  • $ i slutten av reg-exp betyr "slutten av strengen"
  • ? betyr 0 eller 1 treff
  • /?$ vil da bety at både URI som slutter med / (=1 treff i reg-exp) eller ikke slutter med / (=0 treff i reg exp).
  • + tegnet betyr 1 eller flere treff

Dette bruker jeg ofte, og gjør seg fint på veggen på rommet ditt - ved siden av PC-skjermen!

Sk!ppy skrev: I tillegg lurer jeg på hva disse betyr/gjør:
Kode: Merk alt
Options +FollowSymLinks


"note: +FollowSymLinks must be enabled for any rules to work, this is a security requirement of the rewrite engine. "
Sk!ppy skrev:
Kode: Merk alt
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f


%SCRIPT_FILENAME er en server-variable (finnes for eks også tilsvarende i PHP; $_SERVER['SCRIPT_FILENAME']) regner jeg med du skjønner hva er; og
  • ! betyr også "NOT" (merk i RewriteCond - ikke reg-exp)
  • -f betyr "is regular file"
  • -d betyr "is directory"
Disse er såkalte "CondPattern".

Sk!ppy skrev:file= og function= inneholder kun bokstaver.

Jeg bruker stortsett bare [^/\.]+ og gjør valideringen server-side etterpå, fordi det kan varierer hva jeg skal sende gjennom; men du kan endre til [A-Za-z]+ for å bare godta tegn mellom a-z (store og små).

PS! Du finner forøvrig masse nyttig stoff om mod_rewrite hos utgiveren, Apache
Mvh
Joachim M. Giæver
http://development.giaever.org
Brukerens avatar
Nukleuz
Seniormedlem
 
Innlegg: 1659
Registrert: 09.12.2006 2:08
Bosted: Tromsø

Re: Mod_rewrite (htaccess)

Innlegg Sk!ppy » 17.10.2011 0:10

Ah, tusen takk!

Ble litt lettere å forstå hvorfor det aldri har fungert for meg før jeg har fått hjelp før!
"Sk!ppy, Sk!ppy, Sk!ppy the bush kangaroo"
"Client: “You’ll never make any money if you’re always charging for every little thing that you do!”"
Brukerens avatar
Sk!ppy
Medlem
 
Innlegg: 346
Registrert: 05.06.2009 18:32


Gå til Serversideprogrammering og -språk

Hvem er i forumet

Brukere som leser i dette forumet: Ingen registrerte brukere og 4 gjester