Verwijderd

Topicstarter
Mijn probleem (in combinatie met onderstaande .htaccess):
als voorbeeld de url product/12/product-naam.htm
Deze url word niet beinvloed door de eerste rewriterule (voor images/css).
De tweede is degeen die deze url veranderd naar de juiste url, namelijk index.php?page=product&product_id=12.

Nu het gekke (imho). De derde regel is ook van invloed 8)7 Deze veranderd de url zodanig dat het resultaat word index.php?page=index. Dat terwijl regel 2 [L] (last rule) meekrijgt.

Totaal niet gewenst of verwacht vind ik. Wat kan ik doen?

code:
1
2
3
4
5
6
7
8
9
10
11
RewriteEngine on

#no images or css rewrites
RewriteRule ^.*\.(jpe?g|gif|bmp|png|css)$ - [L]

#(probably) only for Products (with subitems)
#RewriteCond %{REQUEST_URI} ([0-9A-Za-z]+)/([0-9]+).*$
RewriteRule ^([0-9A-Za-z]+)/([0-9]+).*$ index.php?page=$1&product_id=$2 [L]

#every menuitem (without subitem selected)
RewriteRule ^([0-9A-Za-z]+).*$ index.php?page=$1 [L]

offtopic:
Heeft tweakers ook een code-taal voor mod/rewrite (oid)?


[edit]
Rule 3 werkt naar verwachting (van mij) niet naar behoren.
De url bla.htm komt ook uit bij index.php?page=index.
Ik zoek zeker tegelijk verder naar wat het kan zijn.

Zou het kunnen zijn omdat dit pakket draait in een subfolder van de (http)server? Ik wil die uitzondering ook in de regels opnemen en dacht dat dit naar behoren gedaan was al.

[ Voor 14% gewijzigd door Verwijderd op 30-07-2008 22:17 ]


  • ValHallASW
  • Registratie: Februari 2003
  • Niet online
Geef even aan dat 'ie index.php nooit moet rewriten.

Verwijderd

Topicstarter
Wow fijn effectief :D Knap gezien vriend. Ik lag dubbel toen ik je oplossing zag omdat ik wist dat het ging werken. Ik ben alleen niet zeker waarom dat het geval is. Gek ben ik.

code:
5
RewriteRule ^.*index.php$ - [L]

Heb ik toegevoegd voor het resultaat. Maar als iemand me nog een uitleg kan geven (of naar verwijzen als url) zou ik weer wat geleerd hebben (het idee alleen al :D).

Thanks Valhalla _/-\o_

[edit]
Ondanks dat ik zeer blij ben, word het alleen nog moeilijk directe requests naar index.php te 404-en (stealth software :z). Is geen verplichting maar daarom bedacht ik me wel dat er vast betere methodes zijn om mijn url's te rewriten (of meer statische url's afdwingen zoals ^\.html?$ ).
Met de tijd komen hier vast meer posts (al dan niet van mijzelf) :)

[ Voor 29% gewijzigd door Verwijderd op 30-07-2008 22:42 ]


Verwijderd

Wederom zeg ik maar weer dat ik maximaal één RewriteRule heb die naar index.php verwijst. Ik laat de PHP code de URL altijd analyseren. Je applicatie moet de URL's kunnen bouwen, dus waarom ook niet kunnen interpreteren? Die mod_rewrite is er niet om logica van je applicatie over te nemen.
Ondanks dat ik zeer blij ben, word het alleen nog moeilijk directe requests naar index.php te 404-en.
Fluitje van een cent. De redirects zijn intern, dus PHP krijgt in $_SERVER['REQUEST_URI'] echt geen 'index.php' door. Als dat wel zo is, is het een directe aanroep, en kun je een 404 response header sturen met de header() functie.

[ Voor 37% gewijzigd door Verwijderd op 30-07-2008 22:43 ]


Verwijderd

Topicstarter
Ja dat is waar, waarom ik ook vind dat niet ieder Menuitem een eigen rule hoeft te hebben. Ik heb (virtuele) bestanden in 2 verschillende diepte van folders met verschillend aantal variabelen. Ik vond het eigenlijk logisch om met mod/rewrite te werken. in php folders exploden had ik geen zin in :z Nog steeds een mogelijkheid ondanks dat je net mijn 404-misser onderuit schopt, dus ook daar zie ik geen vraagstukken meer :) Bedankt.

  • Joolee
  • Registratie: Juni 2005
  • Niet online
Ik schrijf eigenlijk standaard domein.tld/map/map/iets.nogwat door naar index.php/map/map/iets.nogwat. In PHP zoek ik het dan wel weer verder uit.
Dankzij de Mod-Rewrite -f 'pattern' werkt bijvoorbeeld domein.tld/img/ikbesta.jpg wel gewoon.

De gemakkelijkste oplossing voor jouw is simpelweg gebruik maken van [S=1] Daarmee sla je de volgende regel over. :z

Lees trouwens ook eens de handleiding bij mod_rewrite's [L] flag:
Stop the rewriting process here and don't apply any more rewrite rules. This corresponds to the Perl last command or the break command in C. Use this flag to prevent the currently rewritten URL from being rewritten further by following rules. Remember, however, that if the RewriteRule generates an internal redirect (which frequently occurs when rewriting in a per-directory context), this will reinject the request and will cause processing to be repeated starting from the first RewriteRule.
M.A.W, je hebt helemaal niets aan de L flags in jouw situatie.

[ Voor 3% gewijzigd door Joolee op 30-07-2008 22:53 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 17-12-2025

curry684

left part of the evil twins

Ik gebruik al tijden geen complexe rewrite rules meer, veel te veel gezeik. 1 regel:
code:
1
RewriteRule .* index.php [L]

En vervolgens lekker parsen in PHP. Efficienter en gegarandeerd niet recursief.

Enige uitzondering die ik eventueel maak is voor bijv. image fetchers die ik omwille van performance niet langs alle reguliere logica wil sturen, maar dat zijn stukken simpelere rewrites.

Professionele website nodig?


Verwijderd

Topicstarter
Curry en Jolee ook bedankt :) Ik vind het jammer dat de url overnieuw ingevoerd word in het proces. Dat had ik echt niet verwacht :z Dat parsen in php, dat hou ik nog in mijn achterhoofd. Is wel een goede oplossing voor een dynamische afhandeling.

  • 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

Pagina: 1