[mod_rewrite] image/css map uitsluiten

Pagina: 1
Acties:

  • mr_derk
  • Registratie: September 2005
  • Laatst online: 20:56
ik ben bezig dmv aanpassen van .htaccess 'mooie' urls te maken. Ik wil nu graag de css en image dir uitsluiten (zijn beide subdir van root/html).

dit is mijn .htaccess (in de 'project' root)
code:
1
2
3
4
RewriteEngine On
RewriteRule ^(.*)/(.*)/(.*)/ index.php?page=$1&ac=$2&id=$3
RewriteRule ^(.*)/(.*)/ index.php?page=$1&ac=$2
RewriteRule ^(.*)/ index.php?page=$1


na enig woest zoekwerk heb ik gevonden dat je dirs kan uitsluiten door er simpelweg een .htaccess in te zetten met (locatie: root/html/.htaccess):

code:
1
RewriteEngine Off


dit werkt prima voor de url http://localhost/project/. Maar zodra ik: http://localhost/project/overzicht/ wil bezoeken worden stylesheets en afbeeldingen niet meer geladen. De url voorziet $page van een waarde, en vervolgens wordt root/php/overzicht.inc.php ge-include in index.php. Iemand enig idee wat ik fout doe?

bvd

Verwijderd

mr_derk schreef op vrijdag 27 juni 2008 @ 22:00:

dit is mijn .htaccess (in de 'project' root)
code:
1
2
3
4
RewriteEngine On
RewriteRule ^(.*)/(.*)/(.*)/ index.php?page=$1&ac=$2&id=$3
RewriteRule ^(.*)/(.*)/ index.php?page=$1&ac=$2
RewriteRule ^(.*)/ index.php?page=$1
Gebruik liever één rule die alles matcht, en verwerk de URL vervolgens in je PHP code. Aangezien je code de URL's moet opbouwen, is het ook niet gek om de taak van het ontleden aan PHP te geven. Met minder rewrite rules houd je het eenvoudiger. In een programmeertaal is het verwerken van een URL toch al veel simpeler.
na enig woest zoekwerk heb ik gevonden dat je dirs kan uitsluiten door er simpelweg een .htaccess in te zetten met (locatie: root/html/.htaccess):

code:
1
RewriteEngine Off
Niet op deze manier doen. Je kunt beter voorkomen dat de verkeerde URL's worden gerewrite:
code:
1
2
3
4
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/(index\.php$|content/|template/)
RewriteRule (.*) index.php
<

Dit gebruik ik in een applicatie. Meer is absoluut niet nodig. Eventuele inhoudelijke spullen die via HTTP beschikbaar moeten zijn komen in /content/. Spullen voor layout zoals CSS en plaatjes komen in /template/. Bovendien heb je direct het voordeel dat alles wat niet in die directories staat met geen mogelijkheid via HTTP geserveerd zal worden.

  • mr_derk
  • Registratie: September 2005
  • Laatst online: 20:56
Verwijderd schreef op vrijdag 27 juni 2008 @ 22:06:
[...]

Gebruik liever één rule die alles matcht, en verwerk de URL vervolgens in je PHP code. Aangezien je code de URL's moet opbouwen, is het ook niet gek om de taak van het ontleden aan PHP te geven. Met minder rewrite rules houd je het eenvoudiger. In een programmeertaal is het verwerken van een URL toch al veel simpeler.

[...]

Niet op deze manier doen. Je kunt beter voorkomen dat de verkeerde URL's worden gerewrite:
code:
1
2
3
4
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/(index\.php$|content/|template/)
RewriteRule (.*) index.php
<

Dit gebruik ik in een applicatie. Meer is absoluut niet nodig. Eventuele inhoudelijke spullen die via HTTP beschikbaar moeten zijn komen in /content/. Spullen voor layout zoals CSS en plaatjes komen in /template/. Bovendien heb je direct het voordeel dat alles wat niet in die directories staat met geen mogelijkheid via HTTP geserveerd zal worden.
jij hebt er duidelijk meer kaas van gegeten. Zoals ik het uit jou post interpreteer:
- alleen een .httacces in <root>
- met daarin:
code:
1
2
3
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/(index\.php$|html/)
RewriteRule ^(.*)/(.*)/(.*)/ index.php?var1=$1&var2=$2&var3=$3


en die rule vervolgens ontleden in de code.
geprobeerd, maar werkt helaas niet dus ik zal je verkeerd hebben begrepen...

mijn mappen-structuur is:

root/
- .htaccess
- index.php

/html/
- template.html
- css/
- images/
- js/

/php/
<include>.inc.php

Verwijderd

mr_derk schreef op vrijdag 27 juni 2008 @ 22:44:

jij hebt er duidelijk meer kaas van gegeten. Zoals ik het uit jou post interpreteer:
- alleen een .httacces in <root>
- met daarin:
code:
1
2
3
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/(index\.php$|html/)
RewriteRule ^(.*)/(.*)/(.*)/ index.php?var1=$1&var2=$2&var3=$3


en die rule vervolgens ontleden in de code.
geprobeerd, maar werkt helaas niet dus ik zal je verkeerd hebben begrepen...
RewriteRule (.*) index.php

Net als ik gebruik dus. Het is dan heel simpel om $_SERVER['REQUEST_URL'] uit te lezen, te splitsen op slashes, en dat te analyseren.

  • apokalypse
  • Registratie: Augustus 2004
  • Laatst online: 14:43
Verwijderd schreef op vrijdag 27 juni 2008 @ 22:06:
[...]

Gebruik liever één rule die alles matcht, en verwerk de URL vervolgens in je PHP code. Aangezien je code de URL's moet opbouwen, is het ook niet gek om de taak van het ontleden aan PHP te geven. Met minder rewrite rules houd je het eenvoudiger. In een programmeertaal is het verwerken van een URL toch al veel simpeler.
Mod_rewrite is juist hiervoor bedoeld. Waarom zou je het dan in PHP prutsen? 8)7

Als je URLs wilt rewriten, is mod_rewrite daarvoor.

  • Duroth
  • Registratie: Juni 2007
  • Laatst online: 27-04-2016

Duroth

No rest for the tweaked

apokalypse schreef op vrijdag 27 juni 2008 @ 22:48:
[...]

Mod_rewrite is juist hiervoor bedoeld. Waarom zou je het dan in PHP prutsen? 8)7

Als je URLs wilt rewriten, is mod_rewrite daarvoor.
Als je middels mod_rewrite GET vars gaat introduceren, loop je al heel snel tegen beperkingen aan.

Het is niet leuk om een .htaccess van 40 regels door te moeten spitten op zoek naar die ene regel die ervoor zorgt dat een bepaalde afbeelding niet in wordt geladen.

Daarnaast heb ik zo nu en dan problemen als ik op die manier werk, en daarnaast ook middels een 'normale' manier GET variabelen naar mijn script toe gooi.

Cheatah's manier is toch wel de mooiste die ik me zo kan bedenken. Eventueel kan je filteren op extenties in plaats van mappen. Niet zo mooi, wel handig wanneer je met een bestaande site werkt die niet zo'n mooie indeling heeft.

Verwijderd

apokalypse schreef op vrijdag 27 juni 2008 @ 22:48:

Mod_rewrite is juist hiervoor bedoeld. Waarom zou je het dan in PHP prutsen? 8)7
Omdat ik dat beter weet als (web)applicatie developer dan jij. Als ik jouw opmerking zo inschat heb je dus geen flauw idee waarover je het hebt. Ik laat toch praktisch alle URL's rewriten? Dát is inderdaad de taak van mod_rewrite. Níét om werk over te nemen van de applicatie.

Wat voor ervaring heb jij om mij voor prutser te gaan uitmaken met je 73 posts op dit forum? Onderzoek volgende keer even iets beter tegen wie je het hebt.

  • mr_derk
  • Registratie: September 2005
  • Laatst online: 20:56
dit was voor mij de oplossing (met enige hulp _/-\o_ ):

code:
1
2
3
4
5
6
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.*)$ - [L]
RewriteRule ^(.+?)/(.+)/(.+)$ index.php?page=$1&ac=$2&id=$3 [L,QSA]
RewriteRule ^(.+?)/(.+)$ index.php?page=$1&ac=$2 [L,QSA]
RewriteRule ^(.+?)$ index.php?page=$1 [L,QSA]


het zal vast 'variabeler' kunnen, maar ik ben eerst wel blij dat het werkt.

[ Voor 13% gewijzigd door mr_derk op 27-06-2008 23:40 ]

Pagina: 1