Avatar billede kisc Nybegynder
12. september 2003 - 10:19 Der er 5 kommentarer

Adgangsrestriktion med mod_rewrite - hjælp til syntaks o.a.

Jeg har en webserver, der kører Apache samt en rapporthåndterings-applikation, der genererer rapporter fra en database.
Jeg har to typer rapporter A og B og vil gerne lave 2 restriktioner på, hvem der må se disse rapporter.
1. A-rapporterne må kun ses af IP adresser i et bestemt range.
2. B-rapporter må ses af alle, men kun hvis requesteren er henvist fra en anden side på mit site.

Jeg skal bruge query-styrengen i URL'en til at skelne de to typer URL'er fra hinanden. Derfor regner jeg med at jeg skal bruge Apaches mod_rewrite til at lave restriktionerne.
MEN - jeg er ikke sikker på at de RewriteConditions og RewriteRules jeg har opfundet holder stik - og er heller ikke sikker på at syntaksen er rigtig.
Er der et klogt hoved, der vil kigge det igennem og give mig et bud på om det holder eller om jeg er helt i skoven?

Det jeg har forestillet mig er:

1. Blokér A-rapporter for alle der ikke ligger i det tilladte IP-range:

RewriteCondition %{REMOTE_ADDR} !^33\.(.*)  (tilladt IP-range)
RewriteRule ^/application/viewer?us=INTERNAL_(.*) - [F]

2. Sikre at B-rapporter kun kan ses hvis requesten er henvist  fra en anden side på mit site:

RewriteCondition %{HTTP_REFERER}
!^http://www.monsite/servlet(.+)  (skal der \ foran / og . her?)
RewriteRule ^/application/viewer?us=EXTERNAL_(.*) - [F]

På forhånd tak!

/KiSc
Avatar billede madst Nybegynder
12. september 2003 - 13:13 #1
Det ser ikke helt forkert ud - har du problemer med det?
Du kan evt. flytte QUERY_STRING checket op i en RewriteCond (bemærk at det hedder RewriteCond og ikke RewriteCondition).
Altså noget i stil med:
RewriteEngine on
RewriteCond %{QUERY_STRING} ^us=INTERNAL_
RewriteCond %{REMOTE_ADDR} !^33\.(.*)
RewriteRule ^/application/viewer - [F]

Generelt kan det klart anbefales at slå noget logging til når man tester RewriteRules:

RewriteLog logs/rewrite.log
RewriteLogLevel 9
Avatar billede kisc Nybegynder
12. september 2003 - 15:21 #2
Tak!
Det hjælper at stave tingene rigtigt ;-) nu virker mine simple tests i hvertfald. Også godt tip med loglevel!

Er der nogen speciel fordel ved at flytte QUERY_STRING op i i RewriteCond?
Avatar billede madst Nybegynder
12. september 2003 - 15:30 #3
> Er der nogen speciel fordel ved at flytte QUERY_STRING op i i RewriteCond?

Kun hvis det andet giver problemer - ellers er det mest effektivt at matche det hele i RewriteRule.
Avatar billede kisc Nybegynder
12. september 2003 - 16:32 #4
Har du et bud på hvilket af følgende der vil være mest effektiv performancemæssigt?

To RewiteRules med hver sin condition
eller
én RewriteRule med med flere conditions ?

(Forudsat at de overhovedet kan give samme resultat i kombination)
Avatar billede madst Nybegynder
12. september 2003 - 17:57 #5
det vil være ren og skær gætværk fordi det kommer meget an på hvordan hits fordeler sig. Men en ting man skal huske på er at RewriteRules bliver checket før RewriteConds så jo flere du kan få "sorteret fra" ved det match, jo færre gange skal der køres regexes.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Uanset kodesprog, så giver vi dig mulighederne for at udvikle det, du behøver.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester