[Apache 2] Mod_rewrite troubles

Pagina: 1
Acties:

  • Cavorka
  • Registratie: April 2003
  • Laatst online: 27-03-2018

Cavorka

Internet Entrepreneur

Topicstarter
'Middag,

ik probeer op dit moment (zoals zovelen voor mij) de mod_rewrite aan de praat te krijgen voor Apache 2.0 onder Windows XP Pro.

Wat ik heb gedaan tot nu toe:

In de http.conf:
code:
1
2
3
4
5
6
7
8
DocumentRoot "E:/"
[...]
LoadModule rewrite_module modules/mod_rewrite.so
[...]
<Directory />
    Options FollowSymLinks
    AllowOverride All
</Directory>
Nu wil ik dat vanaf de base directory van mijn CMS (welke staat op E:/PHP Projects/CMS/) ik mooie URL's kan gebruiken, dus van de vorm:
http://localhost/PHP%20Projects/CMS/3/browse/i/
en deze moet dan dus omgevormd worden naar:
http://localhost/PHP%20Projects/CMS/index.php?a=3&m=browse&i=i

Lijkt simpel, maar het wil niet werken. In de directory http://localhost/PHP%20Projects/CMS/ staat nu een .htaccess bestand met daarin:
code:
1
2
3
RewriteEngine On
RewriteBase /PHP%20Projects/CMS/
RewriteRule ^/(.*)/(.*)/(.*)/$ index.php?a=$1&m=$2&i=$3
Roep ik nu de URL aan die ik omgetoverd wil hebben (http://localhost/PHP%20Projects/CMS/3/browse/i/) dan krijg ik een Error 404.

In mijn Apache error log staat:
[Tue Aug 24 12:29:40 2004] [error] [client 127.0.0.1] File does not exist: E:/PHP Projects/CMS/3

Ik heb echt bakken met tutorials doorgelezen, en de Apache manual ook, maar in die manual staat echt nergens hoe je het nou precies werkend moet krijgen. Alleen maar wat je kan doen / welke opties je hebt als het werkt. :'(

De .htaccess wordt wel gebruikt, want als ik de %20 eruit haal en daarvoor in de plaats een spatie zet, krijg ik wel een error in de Apache log ([Tue Aug 24 12:17:39 2004] [alert] [client 127.0.0.1] E:/PHP Projects/CMS/.htaccess: RewriteBase takes one argument, the base URL of the per-directory context).

Wat doe ik verkeerd? Zie ik iets over het hoofd? Is mijn regex soms verkeerd? Plz help.

PS: En ja uiteraard heb ik de search hier ook gebruikt, maar die gaan allemaal net niet over het probleem wat ik heb of worden niet opgelost (meer dan de helft van al die topics zijn niet opgelost :/).

[ Voor 28% gewijzigd door Cavorka op 24-08-2004 12:40 ]

the-blueprints.com - The largest free blueprint collection on the internet: 50000+ drawings.


  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 28-08 10:46

DataGhost

iPL dev

probeer die spatie eens uit de mapnaam te halen, ik weet niet zeker of apache ook %20 gebruikt of gewoon spatie
dus probeer het zonder spaties in het pad
of probeer de spatie te escapen (PHP\ Projects)

  • Cavorka
  • Registratie: April 2003
  • Laatst online: 27-03-2018

Cavorka

Internet Entrepreneur

Topicstarter
@DataGhost: Mja, het zou kunnen dat het daar aan ligt (ik ga het wel proberen, maar alleen als last resort).

Wat ik nu heb gedaan, na het lezen van een ander topique (waarin een tip stond over slashes die voor je rule staan):
code:
1
2
3
4
5
RewriteEngine on
RewriteBase "/PHP%20Projects/CMS/"
RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+) /index.php?a=$1&amp;m=$2&amp;i=$3
RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+) /index.php?a=$1&amp;m=$2
RewriteRule ^([a-zA-Z0-9]+) /index.php?a=$1
Dit lijkt te werken, want nu krijg ik een andere error, namelijk:
[Tue Aug 24 12:58:04 2004] [error] [client 127.0.0.1] File does not exist: E:/index.php

Kennelijk geldt de basedir alleen voor de rule en niet voor waar hij naartoe redirect. Dus, verander ik hem nu naar:
code:
1
2
3
4
5
RewriteEngine on
RewriteBase "/PHP%20Projects/CMS/"
RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+) "/PHP Projects/CMS/index.php?a=$1&amp;m=$2&amp;i=$3"
RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+) "/PHP Projects/CMS/index.php?a=$1&amp;m=$2"
RewriteRule ^([a-zA-Z0-9]+) "/PHP Projects/CMS/index.php?a=$1"
En dan krijg ik last van recursie.

Edit: En nog wat gelezen hier en daar:
code:
1
2
3
4
5
6
7
RewriteEngine on
RewriteRule ^index.php.* - [L]
RewriteBase "/PHP%20Projects/CMS/"
RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+) "/PHP Projects/CMS/index.php?a=$1&amp;m=$2&amp;i=$3"
RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+) "/PHP Projects/CMS/index.php?a=$1&amp;m=$2"
RewriteRule ^([a-zA-Z0-9]+) "/PHP Projects/CMS/index.php?a=$1"
RewriteRule ^/ "/PHP Projects/CMS/index.php"
Dit lijkt te werken tot nu toe.

[ Voor 36% gewijzigd door Cavorka op 24-08-2004 19:52 ]

the-blueprints.com - The largest free blueprint collection on the internet: 50000+ drawings.


  • Cavorka
  • Registratie: April 2003
  • Laatst online: 27-03-2018

Cavorka

Internet Entrepreneur

Topicstarter
Okay het werkt dus wel, maar volgens mij werkt het te goed want mijn css files kunnen dus niet meer worden ingeladen. :(

<link rel='stylesheet' href='./css/stylesheet.php' type='text/css' />

werkt dus niet meer. Ik dacht dat mod_rewrite eerst kijkt of de directory bestaat en daarna pas zijn rewriterules eroverheen gooit?

Wat te doen om dit op te lossen (en kom niet met: zet je css files in de home directory plz, want dat is geen oplossing, dat is een workaround)?

the-blueprints.com - The largest free blueprint collection on the internet: 50000+ drawings.


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

djc

Ten eerste is er volgens mij een modifier die ervoor zorgt dat dit de laatste regel is die wordt verwerkt, ik meen dat het [L] is. Verder kan je in je regex aangeven dat je niet wilt matchen als de dir /css is, als je dat doet moet het wel goed gaan met je CSS.


code:
1
2
3
#RewriteEngine On
#RewriteRule ^(assets|forum|pMA)(.*)$ $1$2 [L]
#RewriteRule ^.*$ index.php [L]


Bij de eerste wordt gewoon de normale URL weer in elkaar geplant, bij de tweede wordt de hele request naar index.php gestuurd.

Rustacean


Verwijderd

Daar kan je Aliases voor gebruiken toch? :)
Pagina: 1