[.htaccess] Sommige regels werken niet.

Pagina: 1
Acties:

  • cyberstalker
  • Registratie: September 2005
  • Niet online

cyberstalker

Eersteklas beunhaas

Topicstarter
Ik zit met een vreemd .htaccess probleem. Om mij (nog) onbekende redenen werken sommige RewriteRules niet. De relevante code is als volgt:

code:
1
2
3
4
5
6
7
8
9
RewriteEngine On

RewriteRule ^$                           index.php
RewriteRule ^user\/login\/*$             login.php
RewriteRule ^user\/logout\/*$            login.php?act=logout
RewriteRule ^user\/settings\/*$          settings.php
RewriteRule ^person\/page\/([0-9]+)\/*$  person.php?page=$1
RewriteRule ^person\/view\/([0-9]+)\/*$  person.php?viewuser=$1
RewriteRule ^person\/*$                  person.php


Het vreemde is hier dat alle links werken, behalve de ^person\/page\/([0-9]+)\/*$ en ^person\/view\/([0-9]+)\/*$ . Deze worden namelijk rewritten naar person.php zonder de ?page of ?viewuser variabelen. Zo mogelijk nog vreemder is het dat het op de developmentserver wel werkt, maar niet op de testserver.

Iemand een idee waar dit aan kan liggen?

Ik ontken het bestaan van IE.


  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

Verschillende Apache-versies? Andere httpd.conf?

Rustacean


  • cyberstalker
  • Registratie: September 2005
  • Niet online

cyberstalker

Eersteklas beunhaas

Topicstarter
Het zijn inderdaad verschillende apache-versies. De developmentserver draait apache 2.0.58-r2. De testserver op 1.3.36.

Ik kan helaas niet kijken in de httpd.conf van de testserver, daar heb ik onvoldoende rechten voor. Het lijkt me echter stug dat het daar aan ligt, omdat de meeste RewriteRules gewoon werken. Ik kan me geen enkele instelling bedenken die er voor zorgt dat RewriteRules gedeeltelijk werken.

Ik ontken het bestaan van IE.


  • mrFoce
  • Registratie: Augustus 2004
  • Laatst online: 30-01 07:38
cyberstalker schreef op zondag 08 oktober 2006 @ 10:51:
Het zijn inderdaad verschillende apache-versies. De developmentserver draait apache 2.0.58-r2. De testserver op 1.3.36.

Ik kan helaas niet kijken in de httpd.conf van de testserver, daar heb ik onvoldoende rechten voor. Het lijkt me echter stug dat het daar aan ligt, omdat de meeste RewriteRules gewoon werken. Ik kan me geen enkele instelling bedenken die er voor zorgt dat RewriteRules gedeeltelijk werken.
Apache2 gaat iets anders om met .htaccess dan Apache1. Dus als het wel werkt op Apache2, maar niet op Apache1, is de kans groot dat Apache1 het betreffende commando gewoon niet ondersteunt.

  • cyberstalker
  • Registratie: September 2005
  • Niet online

cyberstalker

Eersteklas beunhaas

Topicstarter
gideon82 schreef op zondag 08 oktober 2006 @ 10:57:
[...]

Apache2 gaat iets anders om met .htaccess dan Apache1. Dus als het wel werkt op Apache2, maar niet op Apache1, is de kans groot dat Apache1 het betreffende commando gewoon niet ondersteunt.
Dat begrijp ik. Wat ik alleen vreemd vind is dat een regel als
code:
1
RewriteRule ^user\/logout\/*$            login.php?act=logout
gewoon prima werkt op beide servers. Zelfs een regel
code:
1
RewriteRule ^faces\/big\/(.*) http://DOMEIN/faces/big/$1 [R,L]
werkt prima dus het capturen met haakjes werkt ook goed.

Ik zou het heel raar vinden als apache 1.3 dan ineens die twee regels niet zou ondersteunen. Ben ik hier nou gewoon dom in of is hier iets raars aan de hand? Belangrijker nog, is hier een alternatief voor waarmee het wel werkt?

Ik ontken het bestaan van IE.


  • frickY
  • Registratie: Juli 2001
  • Laatst online: 04-02 14:45
Waarom escape je een slash?
De * op het eind heeft weinig nut, tenzij je oneindig veel slashes op het eind wilt? Hoort daar niet nog een joker teken voor te staan om een oneindig aantal jokertekens mee te matchen, ipv je laatste karakter, de slash?
Je rewrite "person" naar "person.php". De laatste rewriterule zal deze rewrite weer overschrijven.anneer MultiVieuws aanstaan. Neem zoals in de RewriteRule documentatie staat een stop commando op om aan te geven dat indien een rewrite succesvol is, de volgende rewrites niet meer uitgevoerd moeten worden; De L parameter.
code:
1
2
3
4
5
6
7
8
9
RewriteEngine On

RewriteRule ^$                           index.php [L]
RewriteRule ^user/login/(.*)$             login.php [L]
RewriteRule ^user/logout/(.*)$            login.php?act=logout [L]
RewriteRule ^user/settings/(.*)$          settings.php [L]
RewriteRule ^person/page/([0-9]+)/(.*)$  person.php?page=$1 [L]
RewriteRule ^person/view/([0-9]+)/(.*)$  person.php?viewuser=$1 [L]
RewriteRule ^person/(.*)$                  person.php [L]

  • cyberstalker
  • Registratie: September 2005
  • Niet online

cyberstalker

Eersteklas beunhaas

Topicstarter
Een slash heeft toch speciale betekenis in regular expressions?
De * op het eind heeft weinig nut, tenzij je oneindig veel slashes op het eind wilt? Hoort daar niet nog een joker teken voor te staan om een oneindig aantal jokertekens mee te matchen, ipv je laatste karakter, de slash?
Voor zover ik weet staat de * in regex voor 'match zero or more times'. Oftewel, er mag een / staan (of meerdere) maar dat hoeft niet. Een optionele / op het eind dus.
Je rewrite "person" naar "person.php". De laatste rewriterule zal deze rewrite weer overschrijven wanneer MultiVieuws aanstaan.
Dat lijkt me niet. Ik geef immers aan dat er na person en een optionele / niets meer mag komen (met het $ teken). Deze zou dus niet mogen matchen. Desondanks heb ik het uiteraard al lang geprobeerd met die regel bovenaan.
Neem zoals in de RewriteRule documentatie staat een stop commando op om aan te geven dat indien een rewrite succesvol is, de volgende rewrites niet meer uitgevoerd moeten worden; De L parameter.
code:
1
2
3
4
5
6
7
8
9
RewriteEngine On

RewriteRule ^$                           index.php [L]
RewriteRule ^user/login/(.*)$             login.php [L]
RewriteRule ^user/logout/(.*)$            login.php?act=logout [L]
RewriteRule ^user/settings/(.*)$          settings.php [L]
RewriteRule ^person/page/([0-9]+)/(.*)$  person.php?page=$1 [L]
RewriteRule ^person/view/([0-9]+)/(.*)$  person.php?viewuser=$1 [L]
RewriteRule ^person/(.*)$                  person.php [L]
Helaas, ik heb, ondanks het feit dat het eigenlijk niet zou mogen uitmaken het met de [L] optie geprobeerd, maar zonder resultaat. i.i.g. bedankt voor je reactie.

Edit: zonder slash escaping ook geprobeerd, maakt niets uit.

Ik ontken het bestaan van IE.


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • cyberstalker
  • Registratie: September 2005
  • Niet online

cyberstalker

Eersteklas beunhaas

Topicstarter
Edit: Probleem opgelost.

code:
1
Options -MultiViews

[ Voor 84% gewijzigd door cyberstalker op 08-10-2006 23:06 ]

Ik ontken het bestaan van IE.


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

Omdat het probleem blijkbaar speelde op een non-Windows-systeem verplaats ik dit topic voor de volledigheid toch maar even naar Non-Windows Operating Systems. :P

PRG>>NOS

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Boudewijn
  • Registratie: Februari 2004
  • Niet online

Boudewijn

omdat het kan

waarom zou die multiviews de rewriting vernaggelen?
ik zie heel eerlijk gezegd het verband niet.

Zaram module kopen voor je glasvezelaansluiting?


  • Hagar
  • Registratie: Februari 2001
  • Laatst online: 14-10-2025

Hagar

Diabootic

Multiviews doet ook aan rewriten maar heeft een hogere prioriteit dan de rewrite rules uit .htaccess
Met Multiviews worden urls herschreven als deze in eerste instantie een 404 zouden opleveren.

Zie ook Programming FAQ - PHP

In dit geval wordt /person/page/1/ door Multiviews herschreven naar person.php en staat mod_rewrite buitenspel :)

Nu ook zonder stropdas


  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

cyberstalker schreef op zondag 08 oktober 2006 @ 13:07:
[...]
Een slash heeft toch speciale betekenis in regular expressions?
Niet persee. Bij mod_rewrite iig niet.
[...]
Voor zover ik weet staat de * in regex voor 'match zero or more times'. Oftewel, er mag een / staan (of meerdere) maar dat hoeft niet. Een optionele / op het eind dus.
Correct. Maar in het geval je 'optioneel' bedoelt wil je meestal '?' gebruiken.

All my posts are provided as-is. They come with NO WARRANTY at all.


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

CyBeR schreef op maandag 09 oktober 2006 @ 02:44:
Correct. Maar in het geval je 'optioneel' bedoelt wil je meestal '?' gebruiken.
Aan de andere kant kan het natuurlijk nooit kwaad als je url ook blijft werken als je /-toets per ongeluk blijft hangen. Nodig? Nee. Handig? Misschien. :+

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Hagar
  • Registratie: Februari 2001
  • Laatst online: 14-10-2025

Hagar

Diabootic

offtopic:
@-NMe-
Waaruit blijkt eigenlijk dat dit afspeelt op NOS? :P

Nu ook zonder stropdas


  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

offtopic:
Nergens, maar probeer in Windows forums maar 's een apacheprobleem opgelost te krijgen :P

All my posts are provided as-is. They come with NO WARRANTY at all.


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

CyBeR schreef op maandag 09 oktober 2006 @ 03:01:
offtopic:
Nergens, maar probeer in Windows forums maar 's een apacheprobleem opgelost te krijgen :P
Dat lukt doorgaans prima hoor. ;) En waaruit dat blijkt? Uit een topicreport van de topicstarter. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Hagar
  • Registratie: Februari 2001
  • Laatst online: 14-10-2025

Hagar

Diabootic

offtopic:
@CyBeR: :+
@-NMe-: Ah, vond het al zo raar :D

Nu ook zonder stropdas

Pagina: 1