Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

url's met / ipv get of post vars

Pagina: 1
Acties:

  • anonimoes
  • Registratie: Maart 2001
  • Laatst online: 11-11-2024

anonimoes

Zomerweer is ook maar relatief

Topicstarter
Sinds een tijdje onderhoud ik een site voor vrienden van mij. Deze draait op php en apache. Momenteel is het zo dat ik voor het selecteren van de juiste content post en get vars gebruik, postvars zie je niet in de url gelukkig maar de getvars staan niet erg netjes natuurlijk... Hier zou ik graag verandering in willen aanbrengen. Daarnaast is het niet heel overzichtelijk op deze manier om te zien waar je je in de site bevindt.

Nu gebruikt T.net net als veel andere sites al heel lang een systeem waarbij het "lijkt" alsof je in allerhande subdirs zit te surfen. VB: http://tweakers.net/nieuws/55270/intel-maakt-draadloze-energieoverdracht-efficienter.html. Ik heb inmiddels gevonden dat je via mod_rewrite een url als deze naar een bepaald php bestand kan sturen aan de serverside.

Wat mij alleen niet duidelijk wordt is hoe de verschillende variabelen die in de url van T.net zitten gebruikt kunnen worden binnen het php bestand. Je gaat immers, neem ik aan, niet voor elke subdir een regel op willen nemen in je .htaccess?

Mijn vraag is nu eigenlijk op welke keywords ik verder moet zoeken om een dergelijk systeem aan te leren? Zoeken op mod_rewrite levert uiteraard een hoop op maar dit betreft allemaal hoe je de rewrite toe moet passen en niet hoe je de variabelen in je php bestand ook kan benutten. Als iemand me dus de goede richting op kan sturen dan zou ik het verder zelf wel weer uit moeten kunnen zoeken neem ik aan. Momenteel heb ik gewoon geen idee welke kant ik op moet denken...

Gemberthee: water met een smaakje.


  • Cartman!
  • Registratie: April 2000
  • Niet online
Dit hoort in Programming, niet hier ;)

Toch wat tips: $_SERVER, explode() :)

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Meestal redirect ik alles als volgt:
code:
1
2
3
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond $1 !^(images/|styles/|favicon\.ico|robots\.txt)
RewriteRule ^(.*) index.php?arguments=$1 [L]

Op deze manier kun je in index.php de variabele $_GET['arguments'] exploden op slashes.

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Verwijderd

Het kan eigenlijk op twee manier wat betreft die 'dir-structuur'. Ik raad de code van CodeCaster aan, RewriteRules aan, een andere optie is Apache Multiviews icm een php scriptje.

[ Voor 7% gewijzigd door Verwijderd op 22-08-2008 14:49 ]


  • anonimoes
  • Registratie: Maart 2001
  • Laatst online: 11-11-2024

anonimoes

Zomerweer is ook maar relatief

Topicstarter
@Cartman: eh, idd hoort in programming thuis... my bad. Verder: in $_SERVER[request_uri] zit natuurlijk ook de info van de url.

@Codecaster en Herelam: Thanks! op deze manier kan je idd heel gemakkelijk de argumenten doorgeven.

Ik denk dat ik hier wel weer mee vooruit kan!

Gemberthee: water met een smaakje.


  • anonimoes
  • Registratie: Maart 2001
  • Laatst online: 11-11-2024

anonimoes

Zomerweer is ook maar relatief

Topicstarter
Ik ben inmiddels aan de slag gegaan met mod_rewrite maar ik krijg het niet werkend... Ik heb al verschillende howto's gevolgd en het werkt steeds niet.

Wat het in elk geval niet is:
- phpinfo() geeft aan dat mod_rewrite actief is, dus hij is echt geinstalleerd
- het rewritelog werkt ook, nog een aanwijzing (imho) dat mod_rewrite dus wel echt actief is.
- allowoverride in /etc/apache2/default-server-conf staat op "All" ik zou dus alles mogen doen in de .htaccess bestanden.

Wat ik heb opgenomen in bestanden om het werkend te krijgen:
- ik heb in /etc/apache2/default-server-conf de volgende zinnen staan:
code:
1
2
3
RewriteEngine on
RewriteLog /srv/www/server.rewrite.txt
RewriteLogLevel 9

- in de .htaccess van de map waarin ik test staat:
code:
1
 RewriteRule ^alice.html$ bob.html

Zowel het bestand alice.html als bob.html kan ik gewoon opvragen als ik ze direct opvraag en zijn dus leesbaar.
- edit: dit geheel staat op een openSuse 11 systeem.

Als ik nu echter alice.html opvraag dan krijg ik niet zoals ik zou verwachten bob.html te zien maar gewoon alice.html... Van het log wordt ik ook niet veel wijzer, hier staat dan bijvoorbeeld het volgende in:
code:
1
2
195.169.226.81 - - [23/Aug/2008:02:06:50 +0200] [sel.demon.nl/sid#80060f48][rid#80300bf0/initial] (2) init rewrite engine with requested uri /rewrite/alice.html
195.169.226.81 - - [23/Aug/2008:02:06:50 +0200] [sel.demon.nl/sid#80060f48][rid#80300bf0/initial] (1) pass through /rewrite/alice.html


Ik heb het natuurlijk ook geprobeerd met de code van Codecaster hierboven, als het goed is zou een url als /testdir/bla/11/haha dan moeten worden: /testdir/index.php?arguments=bla/11/haha. Dit gebeurt echter niet, ik krijg een 404, niet gevonden op mijn scherm.

Wat ik overigens ook vreemd vind is dat als ik in de .htaccess zet "RewriteEngine on" dat ik dan voor wat ik in de testdir ook opvraag een 403 access forbidden krijg.

Bovenstaande is een relaas van wat ik geprobeerd heb, ik zie zelf echt niet (meer) wat ik verkeerd doe. Ziet iemand anders de rotte appel wel zitten? Waar ga ik de mist in?

Gemberthee: water met een smaakje.


  • BarthezZ
  • Registratie: Juli 2004
  • Niet online

BarthezZ

anti voetbal en slechte djs!

Hoe ik het in principe doe is als volgt:
RewriteEngine On
RewirteRule news/([0-9]+) news.php?id=$1

Uiteindelijk roep je het in de scripts dus gewoon aan alsof je $_GET variabelen gebruikt.

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Probeer eens een rewriterule te maken voor een niet bestaand bestand in je test map bijv :
code:
1
RewriteRule alice123test.html bob.html

Uit mijn hoofd gezegd dacht ik dat je een speciale switch moest doen om je rewrites boven je bestaande files uit te laten komen...

  • anonimoes
  • Registratie: Maart 2001
  • Laatst online: 11-11-2024

anonimoes

Zomerweer is ook maar relatief

Topicstarter
Gomez12 schreef op zaterdag 23 augustus 2008 @ 02:49:
Probeer eens een rewriterule te maken voor een niet bestaand bestand in je test map bijv :
code:
1
RewriteRule alice123test.html bob.html

Uit mijn hoofd gezegd dacht ik dat je een speciale switch moest doen om je rewrites boven je bestaande files uit te laten komen...
Dit geeft helaas weer een 404, Object not found...

Edit: aanvulling: in de apache errorlog komt ook gewoon te staan "file does not exist" (met nog meer blabla eromheen natuurlijk). Verder niks.

Edit2: Wat me nu ineens opvalt, er staat verder naar boven toe (van eerder vanavond) de volgende lijn:
code:
1
Options FollowSymLinks or SymLinksIfOwnerMatch is off which implies that RewriteRule directive is forbidden: /srv/www/htdocs/rewrite/alice.html


Door in /etc/apache2/default-server-conf "Options None" te veranderen in: " Options FollowSymLinks SymLinksIfOwnerMatch" krijg ik echter nogsteeds geen beweging in de zaak, de 404 blijft precies dat: een 404...

Edit3: Probleem opgelost!
Blijkbaar was de vage 403 access forbidden melding degene die de melding in het errorlog betreffende symlinks triggerde. De 403 kreeg ik alleen als ik "RewriteEngine on" in mijn .htaccess opnam. Nu heb ik die toch weer opgenomen en doet de rewriting het ineens wel, blijkbaar is het opnemen van dit statement in de default-server-conf toch niet voldoende... :?
Nu ik dus followsymlinks heb aangezet slikt ie de "RewriteEngine on" dus wel in de .htaccess waarna rewriting gewoon werkt zoals verwacht...

Naar mijn idee is bovenstaande vrij krom en zou ik "RewriteEngine on" niet meer op hoeven te nemen in de .htaccess toch? Of zit ik daar gewoonweg fout? Feit is in elk geval dat de rewriting nu wel werkt, Gomez12 en Barthezz bedankt voor het meedenken op dit late uur! (en nu ga ik ook slapen ;))

[ Voor 68% gewijzigd door anonimoes op 23-08-2008 04:03 ]

Gemberthee: water met een smaakje.


  • Patriot
  • Registratie: December 2004
  • Laatst online: 16-11 16:51

Patriot

Fulltime #whatpulsert

anonimoes schreef op zaterdag 23 augustus 2008 @ 02:57:
[...]
Naar mijn idee is bovenstaande vrij krom en zou ik "RewriteEngine on" niet meer op hoeven te nemen in de .htaccess toch? Of zit ik daar gewoonweg fout? Feit is in elk geval dat de rewriting nu wel werkt, Gomez12 en Barthezz bedankt voor het meedenken op dit late uur! (en nu ga ik ook slapen ;))
Ik heb volgens mij nog nooit van RewriteEngine on in de httpd.conf zetten gehoord, maar ik kan me niet voorstellen dat als je het gewoon binnen een <Directory> zet, dit niet werkt. Hoe had je het precies in je httpd.conf staan?

[ Voor 0% gewijzigd door Patriot op 24-08-2008 14:59 . Reden: woordje vergeten ]


  • anonimoes
  • Registratie: Maart 2001
  • Laatst online: 11-11-2024

anonimoes

Zomerweer is ook maar relatief

Topicstarter
Ik denk dat je daar de vinger op de zere plek legt inderdaad. Ik had het niet binnen een directory statement gezet... :o (maar gewoon onderaan...)

Edit: Toch even geprobeerd om het bij de definities van de documentroot (/srv/www/htdocs/ op opensuse) te zetten. De instellingen voor de logfile slikt ie daar iig niet (bij apache herstarten geeft dat een syntaxerror) "Rewriteengine on" slikt ie wel maar doet niets, dit moet toch ook nog in de .htaccess staan.

[ Voor 60% gewijzigd door anonimoes op 23-08-2008 14:26 ]

Gemberthee: water met een smaakje.


  • B-Man
  • Registratie: Februari 2000
  • Niet online
"RewriteEngine On" kan gewoon in een <Directory> statement staan, gebruik ik al jaren.

Zie ook: http://httpd.apache.org/d...ewrite.html#rewriteengine
Context: server config, virtual host, directory, .htaccess
Pagina: 1