Toon posts:

[.htaccess] Rewriting (lijkt) te werken plaatjes laden niet

Pagina: 1
Acties:

Verwijderd

Topicstarter
Goedenavond,

Ik heb na een lange tijd prutsen eindelijk een klein idee hoe mod rewrite in zijn werk gaat.
Nu heb ik het volgende .htaccess script gemaakt :

code:
1
2
3
4
5
6
7
8
9
10
Options +FollowSymLinks
RewriteEngine on

RewriteRule (.*)/(.*)/ index.php?pid=$2
RewriteRule (.*)/(.*)/(.*)/ index.php?pid=$2&incpage=$3
RewriteRule (.*)/(.*)/(.*)/(.*)/(.*)/ index.php?album=$2&pageback=$3&pid=$4&naamalbum=$5
RewriteRule (.*)/(.*)/(.*)/(.*)/ index.php?blogpost=$2&cat=$3&pageback=$4

ErrorDocument 404 /errors/error.php  
ErrorDocument 500 /errors/error.php


Om

index.php?pid=20
Om te zetten in :
diensten/20/

index.php?pid=20&incpage=23
Om te zetten in :
diensten/20/23/

index.php?blogpost=8&cat=1&pageback=24
Om te zetten in :
diensten/20/23/23/

index.php?blogpost=8&cat=1&pageback=24
Om te zetten in :
diensten/8/1/24/24/

Sjah of andersom tis maar hoe je het bekijkt.

Nu is het zo dat het in een test script lijkt te werken.
Echter als ik het toevoeg aan mijn site worden de afbeeldingen plots niet meer geladen. :(

Ziet iemand misschien wat ik verkeerd doe?
Het enige dat ik namelijk vind op google of hier is het voorkomen van hotlinken. :(

TIAD

  • mr_derk
  • Registratie: September 2005
  • Laatst online: 08-02 21:18
de urls van je plaatjes worden ook gerewrite, de truuk is een uitzondering toe te voegen voor de sources die leiden naar een bestaand bestand. als img/plaatje.jpg bijv. leidt naar een bestand, moet ie die niet rewriten

je moet deze regel toevoegen:
code:
1
RewriteCond %{REQUEST_FILENAME} -f



btw: je kunt volstaan met 1 rewriterule. Dat leverd bijv '1/2/3' op, dat kan je vervolgens exploden in je code.

[ Voor 67% gewijzigd door een moderator op 31-08-2008 14:23 . Reden: quote weggehaald ]


  • BramT
  • Registratie: Oktober 2001
  • Laatst online: 08-02 17:19

BramT

Rule #1

Voeg even een check toe waardoor het rewriten niet gedaan wordt als er een wel bestaand bestand of folder wordt opgeroepen. Nu rewrite je bijna alles naar de index.php zonder te controleren.

You are the all-dancing, all-singing crap of the world - Jack


Verwijderd

Topicstarter
Klopt!!

Thnx!

Stapje verder

http://site/home/20/

Echter nu laden de afbeeldingen en het CSS niet zodra ik WEL een gerewrite URL opgeef. In andere woorden.

http://site/index.php?pid=20 geeft wel alles weer.
Zodra ik :
http://site/home/20/
Opgeef wordt gelijk alle bijkomende content NIET geladen. 8)7

Verwijderd

gebruik je in je site over relatieve of harde paden? Als je relatieve paden gebruikt (dus de css aanroept via style.css ipv www.blaat.nl/style.css zal ie dus vanaf het gerewrite adres proberen aan te roepen, bijvoorbeeld dus www.blaat.nl/diensten/style.css. Heb zelf dit soort gedonder een tijd gehad in Wordpress dat als ik nette urls ging gebruiken dat de helft van mn theme niet werd geladen.

  • mr_derk
  • Registratie: September 2005
  • Laatst online: 08-02 21:18
probeer eens:
code:
1
2
3
4
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.*)$ - [L]
RewriteRule ^(.+?)$ index.php?var1=$1 [L,QSA]


btw: mogelijk moet je een base tag toevoegen aan de head van je html document, voor de juiste paden

[ Voor 24% gewijzigd door mr_derk op 09-08-2008 18:44 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

TS,
Zet een basedir in je html header (die voor je body komt :P) Anderzijds ziet het er ranzig uit zo imho. Ik zie er geen logica in, Je maakt ook de fouten dat:
De laatste 2 url's die je wilt rewriten gelijk zijn
code:
1
2
3
4
5
6
7
index.php?blogpost=8&cat=1&pageback=24
Om te zetten in :
diensten/20/23/23/

index.php?blogpost=8&cat=1&pageback=24
Om te zetten in :
diensten/8/1/24/24/


pageback 24 geen 23 kan worden
code:
1
2
3
index.php?blogpost=8&cat=1&pageback=24
Om te zetten in :
diensten/20/23/23/


Ach die 8 moet ook een 20 zijn? Dacht een magische waarde vanuit het niets gezien te hebben. Cat=1 is blijkbaar niet nodig.
code:
1
2
3
index.php?blogpost=8&cat=1&pageback=24
Om te zetten in :
diensten/20/23/23/


Elke rewritten url naar een aparte virtuele folder met herhalende informatie.
code:
1
2
diensten/8/1/24/24/ 
etc


Ik zou zeggen, doe eens wat beter je best.

offtopic:
Van mij mag het topic wel terug naar PRG :X


[edit]
offtopic:
tankeriv dat is wel erg offtopic :P Als TS, heb je misschien niets anders toe te voegen?


Ik gooi er nog even een spiekbrief bij. En wat ik laatst leerde, elke keer als een url rewritten is, gaat hij nog een keer door hetzelfde process.

[ Voor 17% gewijzigd door Verwijderd op 10-08-2008 15:50 ]


Verwijderd

Topicstarter
Windows Server en Software????

.htaccess??

Verwijderd

Topicstarter
Sorry,

Ben een tijdje onwijs druk bezig geweest met een project.
Inmiddels verder gegaan met de tips hier gegeven en ben bij een bijna werkend exemplaar gekomen.

Mijn .htaccess bestand ziet er inmiddels als volgt uit

code:
1
2
3
4
5
6
7
8
9
10
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.*)$ - [L]
RewriteRule (.*)/(.*)/ index.php?pid=$2 [L]
RewriteRule (.*)/(.*)/(.*)/(.*)/ index.php?pid=$2&incpage=$4 [L,QSA]

ErrorDocument 404 /errors/error.php  
ErrorDocument 500 /errors/error.php

php_flag register_globals Off


Heb toegevoegd zoals gesuggereerd een base tag in mijn HTML code

code:
1
                <base href="http://applicatie" />


Het punt is echter dat mijn script het volgende wel begrijpt :
http://applicatie/home/20/

Hij haalt hieruit :
http://localhost/applicatie/index.php?pid=20

Echter zodra ik invoer :
http://applicatie/home/20/subpagina/22/

Haalt hij hieruit :
http://localhost/applicatie/index.php?pid=22

Ofwel hij gebruikt nog steeds de eerste regel. Hij gaat niet over naar de tweede regel :S
Hij blijft
code:
1
RewriteRule (.*)/(.*)/ index.php?pid=$2 [L]
gebruiken.

Terwijl hij
code:
1
RewriteRule (.*)/(.*)/(.*)/(.*)/ index.php?pid=$2&incpage=$4 [L,QSA]
dient te gebruiken.

P.S. bedankt "fl!pulI" voor de spiekbrief

Nog een laatste opmerking,

zodra ik de éérste .htaccess regel uitcomment
code:
1
2
##RewriteRule (.*)/(.*)/ index.php?pid=$2 [L]
RewriteRule (.*)/(.*)/(.*)/(.*)/ index.php?pid=$2&incpage=$4 [L,QSA]


Dan gebruikt het script inderdaad de tweede rule. Dus ik maak ergens een fout in de afsluiting.
Echter dan valt mij meteen een tweede fout op.

Ik dacht het probleem met CSS en afbeeldingen te hebben opgelost door de BASE tag in mijn head te plaatsen. Dat leek ook zo te zijn. Tot de tweede rule geforceerd gebruikt werd.
Gelijk nadat dat gedaan werd, werd ook het CSS en de afbeeldingen niet meer gevonden.

En een vaste harde link naar mijn CSS bestand bleek ook geen soelaas te bieden.
Hoewel ik dat overigens liever niet wil ook trouwens.

Maar ik loop dus vast :'(

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op zondag 10 augustus 2008 @ 12:07:
[...]
Windows Server en Software????
Le-zen:

Windows Servers en Server-software
Alles over server-software en Windows servers. Hier vind je alles over Windows 2003, Apache, WSUS, Squid, IIS, MySQL, MS SQL Server en andere server-side applicaties.
Apache is toch écht Server Software.

[ Voor 35% gewijzigd door RobIII op 22-08-2008 18:16 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Topicstarter
RobIII schreef op vrijdag 22 augustus 2008 @ 18:15:
[...]

Le-zen:

Windows Servers en Server-software

[...]


Apache is toch écht Server Software.
Ja maar GEEN Windows
Het draait uiteindelijk onder UNIX.

Daarbij gaat de vraag over .htaccess & PHP.

  • alt-92
  • Registratie: Maart 2000
  • Niet online

alt-92

ye olde farte

Verwijderd schreef op zaterdag 23 augustus 2008 @ 09:46:
[...]


Ja maar GEEN Windows
Het draait uiteindelijk onder UNIX.

Daarbij gaat de vraag over .htaccess & PHP.
En .htaccess is een onderdeel van Apache en dat is Server-software - ongeacht of dat onder *nix of Windows draait.

Kunnen we nou eindelijk eens ophouden met dat geneuzel ?
.htaccess vraagstukken worden al sinds jaar en dag hiernaartoe verplaatst omdat het een config item in je Server-Software is.

ik heb een 864 GB floppydrive! - certified prutser - the social skills of a thermonuclear device


  • Joolee
  • Registratie: Juni 2005
  • Niet online
Verwijderd schreef op vrijdag 22 augustus 2008 @ 16:18:
zodra ik de éérste .htaccess regel uitcomment
code:
1
2
##RewriteRule (.*)/(.*)/ index.php?pid=$2 [L]
RewriteRule (.*)/(.*)/(.*)/(.*)/ index.php?pid=$2&incpage=$4 [L,QSA]


Dan gebruikt het script inderdaad de tweede rule. Dus ik maak ergens een fout in de afsluiting.
Echter dan valt mij meteen een tweede fout op.
Dat komt omdat bij een URL die "(.*)/(.*)/(.*)/(.*)/" matched ook "(.*)/(.*)/". Dat kun je voorkomen door een $ aan het einde te plaatsen, dat geeft aan dat dat het einde van de URL moet zijn.
Je kunt ook gewoon alle regels omkeren.

[ Voor 34% gewijzigd door Joolee op 23-08-2008 14:42 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op zaterdag 23 augustus 2008 @ 09:46:
[...]


Ja maar GEEN Windows
Het draait uiteindelijk onder UNIX.

Daarbij gaat de vraag over .htaccess & PHP.
En als ik had gezegd: Rode auto's en Server Software. Begrijp je het dan wel?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Topicstarter
Joolee schreef op zaterdag 23 augustus 2008 @ 14:41:
[...]
Dat komt omdat bij een URL die "(.*)/(.*)/(.*)/(.*)/" matched ook "(.*)/(.*)/". Dat kun je voorkomen door een $ aan het einde te plaatsen, dat geeft aan dat dat het einde van de URL moet zijn.
Je kunt ook gewoon alle regels omkeren.
HEHE!! MOOI!!! :D!!

Hij LIJKT!! Het te snappen!! :-D

code:
1
2
3
4
5
6
7
8
9
10
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.*)$ - [L]
RewriteRule (.*)/(.*)/(.*)/(.*)/$ index.php?pid=$2&incpage=$4 [L,QSA]
RewriteRule (.*)/(.*)/$ index.php?pid=$2 [L]

ErrorDocument 404 /errors/error.php  
ErrorDocument 500 /errors/error.php

php_flag register_globals Off


Dit werkt!!! :-D

DUS! De oplossing is een $ teken erachter hangen &

code:
1
                    <base href="http://applicatie" />


GEWELDIG!!

THNX!!!

  • posttoast
  • Registratie: April 2000
  • Laatst online: 22:02
mr_derk schreef op zaterdag 09 augustus 2008 @ 18:29:
[...]


de urls van je plaatjes worden ook gerewrite, de truuk is een uitzondering toe te voegen voor de sources die leiden naar een bestaand bestand. als img/plaatje.jpg bijv. leidt naar een bestand, moet ie die niet rewriten

je moet deze regel toevoegen:
code:
1
RewriteCond %{REQUEST_FILENAME} -f



btw: je kunt volstaan met 1 rewriterule. Dat leverd bijv '1/2/3' op, dat kan je vervolgens exploden in je code.
Vraagje over die laatste opmerking: dat gaat toch alleen werken als je weet in welke directory een applicatie draait? Stel ik heb: http://www.domein.com/testsite/. En ik heb dit in mijn .htaccess staan:

code:
1
2
3
4
5
6
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.*)$ - [L]
RewriteRule ^(.*)$ index.php
</IfModule>


Ik route nu dus al het verkeer door naar index.php, tenzij het bestand dat ik opvraag echt op de server bestaat. Nu moet ik in PHP op deze manier exploden:

PHP:
1
2
$uri = stristr($_SERVER['REQUEST_URI'], '/testsite');
$urlArray = explode('/', trim($uri, '/'));


Als de site verhuist moet ik dus de PHP aanpassen. Dat lijkt me niet heel handig. Of zie ik iets over het hoofd en zijn er makkelijkere manieren om dit te doen?

omniscale.nl


  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

De makkelijkste manier is natuurlijk alles voor de huidige directory uit de array slicen. Hoeveel elementen dit zijn is dan afhankelijk van je configuratie :)

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • posttoast
  • Registratie: April 2000
  • Laatst online: 22:02
Domme vraag misschien, maar hoe weet ik dan wat de huidige directory is?

omniscale.nl


  • posttoast
  • Registratie: April 2000
  • Laatst online: 22:02
Subtiel schopje: de tip van Spider.007 verschuift volgens mij alleen maar het probleem. Want als ik weet hoeveel elementen er voor de huidige directory zitten kan ik net zo goed exploden zoals ik eerder deed. Of snap ik je verkeerd?

omniscale.nl


  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Of ik begrijp je verkeerd; of je hebt gewoon een enorm basic probleem. Stel je site begint op /testsite/ en verhuist daarna naar /site/. Dat betekent dat alles voor de 2e slash niet interessant is. Dan kun je dus bijvoorbeeld dit doen:
PHP:
1
$urlArray = array_slice($urlArray, 2);
'2' zou dan uit je $config kunnen komen. De huidige directory is natuurlijk (ongerelateerd) ook eenvoudig te achterhalen door dit te tikken:
PHP:
1
dirname(__FILE__);

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • posttoast
  • Registratie: April 2000
  • Laatst online: 22:02
Wat je zegt snap ik (geloof ik), alleen mijn punt is dat die 2 dus variabel is. Het maakt namelijk nogal wat uit of je site dan op www.domein.com/site staat of op www.domein.com/foo/bar/site. In het tweede geval moet je de array anders slicen en dát vind ik dus niet handig. Ja, je kunt een $config-variabele aanmaken waarin je dit opslaat, maar je moet dit aanpassen als je de site van de testomgeving haalt en live zet bijvoorbeeld.

Of ben ik nu heel dom aan het praten? :)

omniscale.nl


  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Nee, het klopt dat je dan handmatig een '2' ergens moet aanpassen; vandaar al mijn 2e dirname comment, je zou dat kunnen gebruiken om te bepalen om die '2' aan te passen; maar dat is toch logisch? Zou je verwachten dit met een rewriterule op te kunnen lossen?

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • posttoast
  • Registratie: April 2000
  • Laatst online: 22:02
De enige generieke oplossing die ik kan bedenken is een string in de URL zetten die altijd hetzelfde is, zodat daarop gesplit kan worden. Het woord 'forum' hier op GoT bijvoorbeeld. Alleen is dat dan weer niet in alle gevallen even handig.

Ik wist niet of dit met een rewriterule op te lossen was, dat vroeg ik me dus af.

Maar goed, we snappen elkaar in ieder geval :)

omniscale.nl

Pagina: 1