Avatar billede nicholas- Nybegynder
10. september 2007 - 11:45 Der er 9 kommentarer

Rewrite Cond

Hej

Jeg har disse to regler:

RewriteRule ^show-([^/.]+)-?([^/.]+).html$ /index.php?page=show&navn=$1&kategori=$2 [L]

RewriteRule ^showone-([^/.]+)-([0-9]+).html$ /index.php?page=showone&navn=$1&id=$2 [L]

Reglerne virker fint, men det jeg gerne vil er at fjerne showone og show. - Men hvis jeg fjerner det, så læser den reglerne som ens, og tager den som står øverst i .htcaccess.
Tror man skal tilføje en condition - men ved i hvilken??

Et andet spørgsmål er hvordan jeg får lukket af for url'er. Så hvis man f.eks. i stedet for http://minside.dk/showone-Test%201-3.html skriver http://minside.dk/?page=showone&navn=Test%201&id=3.html, så kommer den med en fejlmeddelse(404).
Avatar billede nicholas- Nybegynder
11. september 2007 - 18:29 #1
Ingen der ved noget??
Avatar billede elhaard Nybegynder
12. september 2007 - 19:45 #2
Første spørgsmål:

Hvis du fjerner show- og showone, er det klart, at den altid tager første regel, da den vil matche alt, som den nederste matcher:

([^/.]+)  er det samme
-?        matcher også -
([^/.])  matcher også 0-9, da cifre ikke er /.

Byt om på rækkefølgen af reglerne, så burde det virke.
Avatar billede elhaard Nybegynder
12. september 2007 - 20:04 #3
Andet spørgsmål:

Du vil altså gerne have, at man ikke kan tilgå det direkte?

Jeg vil foreslå (utestet):

  # Den følgende regel gælder for alle URL'er, der indeholder ?
  RewriteCond %{REQUEST_URI} \?
  RewriteRule ^.* /grum_ikke_eksisterende_side [F]  # Eller [L]

  ## Indsæt dine 2 ovenstående regler her

På den måde vil uønskede URL'er _først_ blive smidt væk, derefter vil ønskede URL'er blive lavet om.

Det er måske lidt drastisk at smide alle URL'er med ? væk - i stedet kan du benytte

RewriteCond %{REQUEST_URI} ^/\?
RewriteCond %{REQUEST_URI} ^/index.php\?
Avatar billede nicholas- Nybegynder
12. september 2007 - 22:22 #4
Hej

Første spørgsmål: Tak - det er rigtig nok ;)

Andet spørgsmål: Jeg kan ikke rigtig smide alle url'er væk med ?.. Det er en tand for meget. Med hensyn til det sidste du skriver, hvad gør de to så? Fordi når jeg bruger dem som cond, så giver det en 404...
Avatar billede elhaard Nybegynder
13. september 2007 - 00:50 #5
Meningen var, de skulle matche på henholdsvis /? og /index.php?

Så det samlede eksempel bliver

 
  RewriteCond %{REQUEST_URI} ^/index.php\? [OR]
  RewriteCond %{REQUEST_URI} ^/\?
  RewriteRule ^.* /grum_ikke_eksisterende_side [F]  # Eller [L]

  ## Indsæt dine 2 ovenstående regler her
Avatar billede nicholas- Nybegynder
13. september 2007 - 11:40 #6
Har indsat koden, men siden kører som hidtil, ikke rigtig nogen forskel.
Avatar billede elhaard Nybegynder
13. september 2007 - 13:53 #7
Hmm. Ligger din side i roden af dite site - altså http://whatever.dk/index.php og ikke http://whatever.dk/noget/index.php ?

Reglerne matcher på ^, altså starten af URI'en. Så hvis din side ligger i et underkatalog, må du bruge f.x. ^/noget/index.php\?


Hvis siden ligger i roden, og det ikke virker, kan du i stedet prøve:

  RewriteCond %{REQUEST_URI} ^/index.php\?
  RewriteCond %{QUERY_STRING} page
  RewriteRule . /grum_ikke_eksisterende_side [L]

  RewriteCond %{REQUEST_URI} ^/\?
  RewriteCond %{QUERY_STRING} page
  RewriteRule . /grum_ikke_eksisterende_side [L]

  ## Indsæt dine 2 ovenstående regler her

eller bare

  RewriteCond %{QUERY_STRING} page
  RewriteRule . /grum_ikke_eksisterende_side [L]

  ## Indsæt dine 2 ovenstående regler her

Ovenstående ser bare på, om der er teksten "page" findes noget sted efter ? i URL'en

Du skal være opmærksom på, at man stadig kan snyde ved at bruge POST i stedet for GET.

I virkeligheden burde du omdøbe din fil til f.x. hemmelig.php og så lave

  # Blokér for alle direkte requests til /hemmelig.php
  RewriteCond %{REQUEST_URI} ^/hemmelig.php        # Prøv evt. bare med ^hemmelig.php
  RewriteRule . /grum_ikke_eksisterende_side [F]  # Eller [L]

  # Do voodoo
  RewriteRule ^([^/.]+)-([0-9]+).html$ /hemmelig.php?page=showone&navn=$1&id=$2 [L]
  RewriteRule ^([^/.]+)-?([^/.]+).html$ /hemmelig.php?page=show&navn=$1&kategori=$2 [L]
Avatar billede nicholas- Nybegynder
13. september 2007 - 15:11 #8
Det driller virkelig!

Prøvede at blokere index.php med det du gav

RewriteCond %{REQUEST_URI} ^/index.php        # Prøv evt. bare med ^hemmelig.php
  RewriteRule . /grum_ikke_eksisterende_side [F]  # Eller [L]

Den blokerer bare alt. Min Rewrite er lidt modificeret nu, den ser sådan her ud:

RewriteEngine on

RewriteRule ^([_a-zA-Z0-9]+).html$ /index.php?page=$1 [L]

RewriteRule ^([^/.]+)-?([^/.]+)$ /index.php?page=show&navn=$1&kategori=$2 [L]

RewriteRule ^([^/.]+)/([^/.]+)-([0-9]+).html$ /index.php?page=showone&navn=$2&id=$3&kategori=$1 [L]

RewriteRule ^accept-([^/.]+).html$ /index.php?page=accept&fragt=$1 [L]
Avatar billede nicholas- Nybegynder
14. september 2007 - 15:15 #9
Kan man egentlig ikke gå den omvendte vej og så bare sige at de skal [F] eller [R] til index.php?

Altså at hvis man har:

RewriteRule ^([^/.]+)-?([^/.]+)$ /index.php?page=show&navn=$1&kategori=$2 [L]

så flytter man det sidste foran til:

RewriteRule ^/index.php?page=show&navn=$1&kategori=$2 [F]

??
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