Gå til innhold

mod_rewrite og skråstreker


Anbefalte innlegg

Skrevet

Lite spørsmål om mod_rewrite;

Har følgende RewriteRule:

RewriteRule ^(.*)php/(.*)$ $1?page=php&script=$2 [NC]

Funker fett med f.eks domene.com/php/, men hvis jeg fjerner den siste slash'en blir det 404. Hvordan får jeg gjort slash'en etter "php" (og etter den andre "(.*)"-en) "valgfri".

 

For å kanskje gjøre det litt knotete spørsmålet lettere å forstå, noen eksempel-URLer som jeg vil ha til å funke:

domene.com/php/ funker

domene.com/php funker ikke

domene.com/php/test/ funker, men $script-variabelen i URL får verdien "test/" med slash'en

domene.com/php/test funker

Videoannonse
Annonse
Skrevet (endret)

Har du fått det til enda, Loomy?

Du kan vel bare legge til flere RewriteRule's ?

f.eks

RewriteRule ^(.*)php$ $1?page=php [NC]
RewriteRule ^(.*)php/(.*)$ $1?page=php&script=$2 [NC]
RewriteRule ^(.*)php/(.*)/$ $1?page=php&script=$2 [NC]

Muligens?

 

PCRE-syntaksen som mod_rewrite bruker finner man litt bedre dokumentasjon på her

 

Må forøvrig også minne på at det her er ett stykke unna PHP.

 

edit: testa litt nærmere selv nå, mulig det ikke funker helt, eller at du må bruke noen andre Regular expressions.

Endret av LoS
Skrevet (endret)

Hehehe. Hvis du vil ha et valgfritt tegn eller en valgfri tegngruppe er det ikke verre en at du legger til et spørsmålstegn etter tegnet som skal være valgfritt.

 

Derfor er jeg ganske sikker på at følgende vil fungere:

RewriteRule ^(.*)php/?([^./]*)/?$ $1?page=php&script=$2 [NC]

 

:thumbup:

 

Edit: Forandret litt slik at du slipper at skråstreken er med i variabelen $2. Merk at det nå ikke er tillatt med skråstreker eller punktum'er i variabel $2 i det hele tatt (dette bidrar til å gjøre scriptet sikrere).

Endret av Lokaltog
Skrevet (endret)

hvordan blir rewriterulen på siden min når alle sidene har følgende mønster :

 

?page=xxx

 

Akkurat det samme som over? altså

RewriteRule ^(.*)php/?([^./]*)/?$ $1?page=php&script=$2 [NC]

...eller?

Endret av Tha_Zaynt
Skrevet

Akkurat nå så ser min slik ut:

RewriteRule ^(.*)/$ /index.php?page=$1

Er ikke så veldig stø på mod_rewrite, anyways så kan jeg nevne at jeg sjekker varaiblen til page i phpscriptet i stedet for i "regelen" med en regex.

kan bytte ut (.*) med ([a-z0-9]) steden for eksempel.

Skrevet

Så lenge 70% av alle på webdesignforumet her inne bruker servetheworld, og jeg har sett att noen av dem bruker mod_rewrite, så vil jeg anta det.

 

Kan også sjekke under "loaded modules", eller noe med phpinfo();

Skrevet

hmm.... jeg åpnet notisblokk og skrev følgende:

 

RewriteEngine on
RewriteRule ^(.*)/$ /index.php?page=$1

 

Deretter lagret jeg denne som .htaccess og lastet den opp i "root"-mappa, men ingenting skjedde. Jeg prøvde også å laste opp filen til mappen der sidene som blir inkludert ligger. Har jeg glemt noe? En annen ting som er litt merkelig er at jeg ikke kan se .htaccess-filen med ftp-klienten min (bruker WS_FTP Pro) selv om jeg er _helt_ sikker på at den ble lastet opp.. Jeg får heller ikke opp noen melding om jeg vil skrive over den aktuelle filen når jeg laster opp en ny .htaccess fil.

Skrevet (endret)

Den skal ligge i dokumentrota, httpdocs eller public_html eller hva stw kaller det. Så skal du bare bruke dittdomene.no/hvasomvanligvisstodipage/.

 

edit: stw har tydeligvis skrudd av visningen av skjulte filer, filer med . foran blir ofte gjort usynlige på linux, derfor ser du den ikke.

 

Nå husker jeg ikke helt hva du stilte på i ftp-programmet, men i shell så bruker man ls -a hvis jeg ikke husker helt feil nå.

Endret av LoS
Skrevet (endret)

ok...så istedet for www.mitt.domene.com/index.php?page=hovedsiden, blir det:

 

www.mitt.domene.com/hovedsiden ?

Endret av Tha_Zaynt
Skrevet (endret)

Lokaltog: Det funket heller dårlig :)

Får faktisk ikke opp hovedsiden engang. I hvertfall ikke når det er sånne ([^./]*) inni bildet.

 

Her er for øvrig hele mod_rewrite-avdelingen i (den hittil best fungerende) htaccess-filen:

RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteRule ^.htaccess$ - [F]
RewriteRule ^(.*)main/$ $1?page=main [NC]
RewriteRule ^(.*)tutorials/(.*)$ $1?page=tutorials&view=$2 [NC]
RewriteRule ^(.*)php/(.*)$ $1?page=php&script=$2 [NC]
RewriteRule ^(.*)htmlcss/(.*)$ $1?page=htmlcss&article=$2 [NC]

Noe som ikke hører hjemme der, mon tro? :hmm:

 

EDIT: Er vel ikke så veldig viktig å blokke punktum og skråstreker på dette stadiet. Dette vil jeg uansett ha en sperre for i selve include-scriptet.

Endret av Loomy

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...