[Apache] htaccess slashes -> dashes

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • ? ?
  • Registratie: Mei 2007
  • Niet online
url.ext/1 moet naar url.ext/1.php
url.ext/1/2 moet naar url.ext/1-2.php
url.ext/1/2/3 moet naar url.ext/1-2-3.php
url.ext/1/2/3/4 moet naar url.ext/1-2-3-4.php

Ik kan 1 van de 4 doen werken, maar niet allemaal tegelijk. De apache rewrite module blijft werken, ondanks de L; dat is blijkbaar normaal gedrag. Hoe kan ik dat toch oplossen? Lijkt een simpele vraag.

Deze snippet code werkt prima voor alles dat minimaal 2 slashes heeft na ext, maar niet voor url.ext/1
code:
1
2
3
4
5
RewriteEngine On
RewriteBase /

RewriteRule ^([^/]+)/([^/]+)/?$ $1-$2.php [NE,L]
RewriteRule ^([^/]+)/(.+)$ $1


Hoe krijg je dat werkend zodat ook url.ext/1 naar 1.php verwezen wordt?

edit: - ipv _ :(

Alle reacties


Acties:
  • 0 Henk 'm!

  • V-rg
  • Registratie: Juni 2007
  • Laatst online: 10-10 20:26
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)$ $1.php [L]
RewriteRule ^([^/]+)/([^/]+)$ $1-$2.php [L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)$ $1-$2-$3.php [L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)$ $1-$2-$3-$4.php [L]
Ben niet helemaal thuis met al deze instellingen maar dit moet volgens mij wel werken :P.
Hoewel volgens je voorbeeld - gebruikt en de .htaccess weer _.

Acties:
  • 0 Henk 'm!

  • Montaner
  • Registratie: Januari 2005
  • Laatst online: 10-10 13:14
Lees dit eens: https://gist.github.com/RaVbaker/2254618

Gewoon alles redirecten naar index.php (of een andere pagina) en vanaf daar de afhandeling doen. Al maak je een PHP pagina met alleen dit erin:

PHP:
1
2
3
4
if(isset($_GET["first"]) && file_exists($_GET["first"] . '.php'))
{
     require_once($_GET["first"] . '.php');
}


Dit voorbeeld (ff hier getypt, fouten voorbehouden ;)) uitbreiden met het afhandelen van subpagina's in je $_GET waarde, en voila.

[ Voor 16% gewijzigd door Montaner op 26-10-2016 13:03 ]


Acties:
  • 0 Henk 'm!

  • ? ?
  • Registratie: Mei 2007
  • Niet online
Ik weet dat het zo kan, maar dat wil ik niet. In PHP kan ik dat huppeldepuppel oplossen.

Acties:
  • +2 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
trix0r schreef op woensdag 26 oktober 2016 @ 13:00:
Al maak je een PHP pagina met alleen dit erin:

PHP:
1
2
3
4
if(isset($_GET["first"]) && file_exists($_GET["first"] . '.php'))
{
     require_once($_GET["first"] . '.php');
}
Dat is geen best practice.

http://stackoverflow.com/questions/1342190/file-exists-safe
http://stackoverflow.com/...ble-if-you-use-preg-repla

etc

March of the Eagles


Acties:
  • 0 Henk 'm!

  • ? ?
  • Registratie: Mei 2007
  • Niet online
V-rg schreef op woensdag 26 oktober 2016 @ 12:47:
[...]
Ben niet helemaal thuis met al deze instellingen maar dit moet volgens mij wel werken :P.
Hoewel volgens je voorbeeld - gebruikt en de .htaccess weer _.
Dat werkt spijtig genoeg ook niet. Regel per regel wel, allemaal samen niet.

Acties:
  • +1 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 08-10 23:48

Ventieldopje

I'm not your pal, mate!

Voor dit soort zaken ben je toch veel flexibeler als je een simpele router implementeerd zoals trix0r (albeit dan beter)?

Je hebt dan helemaal zelf de controle over de structuur van je bestanden en dat is iets makkelijker te realiseren dan met vaste regexes. Bovendien ben je een stuk flexibeler en kun je het eventueel zelfs dynamisch maken.

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • +1 Henk 'm!

  • ? ?
  • Registratie: Mei 2007
  • Niet online
Een kleine uitdaging hé ;)
Blijkbaar staat er nergens op internet iets dat dit doet en is het vervangen van alle karakters geen prettig (of onbegonnen) werk met mod_rewrite

Dus ben ik maar overstag gegaan en heb ik een controller gebruikt. :'(

htaccess:
code:
1
2
3
4
5
6
7
Options +FollowSymLinks
RewriteEngine On
 
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
 
RewriteRule ^.*$ ./rewrite.php

rewrite.php: (lijkt me wel veilig)
code:
1
2
3
$uri = trim(preg_replace('/[^A-Za-z0-9-]/', '', str_replace('/', '-', substr($_SERVER['REQUEST_URI'], 0, strpos($_SERVER['REQUEST_URI'], '?') > 0 ? strpos($_SERVER['REQUEST_URI'], '?') : strlen($_SERVER['REQUEST_URI'])))), '-');
    if(file_exists($uri.'.php'))
        include($uri.'.php');

[ Voor 7% gewijzigd door ? ? op 26-10-2016 14:35 ]

Pagina: 1