PDA

Bekijk Volledige Versie : [Apache] Vastloper na RewriteRule



Maarten Wierda
16/03/04, 21:55
Dag lezers van nl.internet.www.server-side,

Naar aanleiding van het artikel 'How to Succeed With URLs' op
<http://www.alistapart.com/articles/succeed/> besloot ik op mijn lokale
webserver ook eens aan de slag te gaan met /mooie/ urls.

Het probeersel bevindt zich in de directory '/_tests/niceurl' die netjes
in de webroot staat. In .htaccess staat het volgende:

RewriteEngine on
RewriteRule !\.(gif|jpg|png|css)$ /_tests/niceurl/index.php

Als ik echter het <http://localhost/_tests/niceurl/fff> aanroep, gebeurt
er helemaal niets, volgens mij raakt Apache dan verwikkeld in een
oneindige lus.

Indien ik de tweede regel van m'n .htaccess aanpas in:

RewriteRule !\.(gif|jpg|png|css)$ /_tests/niceurl/a.gif

... en ik roep bovengenoemd adres aan, wordt er wél netjes het gifje
getoond. De rewrite module zou dus moeten werken.

Ik ben nog redelijk onbekend met Apache dus wie zou me een eindje op weg
kunnen helpen?

Alvast vriendelijk bedankt.

--
Cheers, Maarten Wierda

"Old school, new school.
Shit, I didn't go to school!"

Daniel Tryba
16/03/04, 22:45
Maarten Wierda <maartenAT@norecessdot.com> wrote:
> RewriteEngine on
> RewriteRule !\.(gif|jpg|png|css)$ /_tests/niceurl/index.php
>
> Als ik echter het <http://localhost/_tests/niceurl/fff> aanroep, gebeurt
> er helemaal niets, volgens mij raakt Apache dan verwikkeld in een
> oneindige lus.

Dat kan je makkelijk verhelpen met een extra RewriteCond:

RewriteCond %{REQUEST_URI} !^/_tests/niceurl/index.php$

Overigens de oorzaak is waarschijnlijk te vinden op:
http://httpd.apache.org/docs/mod/mod_rewrite.html#RewriteRule

<q>
Notice: When using the NOT character to negate a pattern you cannot have
grouped wildcard parts in the pattern. This is impossible because when
the pattern does NOT match, there are no contents for the groups. In
consequence, if negated patterns are used, you cannot use $N in the
substitution string!
</q>

--

Daniel Tryba

Ronald Klip
16/03/04, 22:45
Maarten Wierda schreef:
>
> RewriteEngine on
> RewriteRule !\.(gif|jpg|png|css)$ /_tests/niceurl/index.php
>
> Als ik echter het <http://localhost/_tests/niceurl/fff> aanroep, gebeurt
> er helemaal niets, volgens mij raakt Apache dan verwikkeld in een
> oneindige lus.

Dat laatste kan kloppen; je rule wordt immers ook toegepast op het
bestand waarnaar je redirect. Dat kan je voorkomen door voor de rule een
voorwaarde te plaatsen die dat specifieke bestand uitsluit, à la

RewriteCond %{REQUEST_URI} !\/_tests\/niceurl\/index\.php$
RewriteRule [etc.]

(niet getest...)

--
groet, Ronald

Maarten Wierda
16/03/04, 23:35
Daniel Tryba wrote:

>>RewriteEngine on
>>RewriteRule !\.(gif|jpg|png|css)$ /_tests/niceurl/index.php
>>
>>Als ik echter het <http://localhost/_tests/niceurl/fff> aanroep, gebeurt
>>er helemaal niets, volgens mij raakt Apache dan verwikkeld in een
>>oneindige lus.
>
> Dat kan je makkelijk verhelpen met een extra RewriteCond:
>
> RewriteCond %{REQUEST_URI} !^/_tests/niceurl/index.php$

Inderdaad, nu wordt index.php wel direct aangeroepen. Hartstikke bedankt.

> Overigens de oorzaak is waarschijnlijk te vinden op:
> http://httpd.apache.org/docs/mod/mod_rewrite.html#RewriteRule

Waarschijnlijk wel ja. Alleen ben ik totaal niet bekend met Apache en
van RewriteCond had ik nog niet gehoord. Ik heb wel geprobeerd een
oplossing te zoeken op de website van Apache maar het is altijd lastig
zoeken als je niet precies weet wat het probleem is.

Een soortgelijk verhaal heb je vast eerder gehoord denk ik ;)

Nogmaals bedankt.

--
Cheers, Maarten Wierda

"Old school, new school.
Shit, I didn't go to school!"

Maarten Wierda
16/03/04, 23:35
Ronald Klip wrote:

>>RewriteEngine on
>>RewriteRule !\.(gif|jpg|png|css)$ /_tests/niceurl/index.php
>>
>>Als ik echter het <http://localhost/_tests/niceurl/fff> aanroep, gebeurt
>>er helemaal niets, volgens mij raakt Apache dan verwikkeld in een
>>oneindige lus.
>
> Dat laatste kan kloppen; je rule wordt immers ook toegepast op het
> bestand waarnaar je redirect. Dat kan je voorkomen door voor de rule een
> voorwaarde te plaatsen die dat specifieke bestand uitsluit, à la
>
> RewriteCond %{REQUEST_URI} !\/_tests\/niceurl\/index\.php$
> RewriteRule [etc.]
>
> (niet getest...)

Helaas, Daniel was net iets eerder ;) Zoals je kunt lezen in mijn
reactie op Daniel's bericht werkt het inmiddels.

Bedankt voor het meedenken.


--
Cheers, Maarten Wierda

"Old school, new school.
Shit, I didn't go to school!"

Nico Coesel
17/03/04, 16:05
Ronald Klip <nieuws@bladibla.net.invalid> wrote:

>Maarten Wierda schreef:
>>
>> RewriteEngine on
>> RewriteRule !\.(gif|jpg|png|css)$ /_tests/niceurl/index.php
>>
>> Als ik echter het <http://localhost/_tests/niceurl/fff> aanroep, gebeurt
>> er helemaal niets, volgens mij raakt Apache dan verwikkeld in een
>> oneindige lus.
>
>Dat laatste kan kloppen; je rule wordt immers ook toegepast op het
>bestand waarnaar je redirect. Dat kan je voorkomen door voor de rule een
>voorwaarde te plaatsen die dat specifieke bestand uitsluit, à la
>
>RewriteCond %{REQUEST_URI} !\/_tests\/niceurl\/index\.php$
>RewriteRule [etc.]
>

Wat je ook kunt doen is [last] achter de regel te zetten, zodra een
regel matcht, dan wordt deze uitgevoerd en wordt dankzij de [last] uit
het rewrite gedeelte gesprongen.

--
Reply to nico@nctdevpuntnl (punt=.)
Bedrijven en winkels vindt U op www.adresboekje.nl

Daniel Tryba
17/03/04, 18:15
Nico Coesel <nico@puntnl.niks> wrote:
>>RewriteCond %{REQUEST_URI} !\/_tests\/niceurl\/index\.php$
>>RewriteRule [etc.]
>
> Wat je ook kunt doen is [last] achter de regel te zetten, zodra een
> regel matcht, dan wordt deze uitgevoerd en wordt dankzij de [last] uit
> het rewrite gedeelte gesprongen.

Dat dacht ik ook toen het probleem van de OP las... maar is niet een
oplossing (getest).

--

Daniel Tryba

Maarten Wierda
18/03/04, 17:05
Daniel Tryba wrote:

>>RewriteEngine on
>>RewriteRule !\.(gif|jpg|png|css)$ /_tests/niceurl/index.php
>>
>>Als ik echter het <http://localhost/_tests/niceurl/fff> aanroep, gebeurt
>>er helemaal niets, volgens mij raakt Apache dan verwikkeld in een
>>oneindige lus.
>
> Dat kan je makkelijk verhelpen met een extra RewriteCond:
>
> RewriteCond %{REQUEST_URI} !^/_tests/niceurl/index.php$

Ik zit toch nog met een probleem. Wanneer ik
<http://localhost/_tests/niceurl/fff> aanroep werkt het goed, ik wil
namelijk iets met de URI doen. Echter, wanneer ik
<http://localhost/_tests/niceurl/index.php> aanroep, krijg ik een
zogenaamde '500 Internal Server Error'. In m'n error log staat hier het
volgende over:

[Thu Mar 18 16:57:17 2004] [error] [client 127.0.0.1] Premature end of
script headers: c:/apache/php/php.exe

M'n .htaccess ziet er dus als volgt uit:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/_tests/niceurl/index.php$
RewriteRule !\.(gif|jpg|png|css)$ /_tests/niceurl/index.php

Heeft er iemand een idee hoe ik dit kan voorkomen? Ik dacht dat
'RewriteCond' er voor zorgde dat er niets raar gebeurt wanneer index.php
rechtstreeks wordt aangeroepen.

Bij voorbaat dank.

--
Cheers, Maarten Wierda

"Old school, new school.
Shit, I didn't go to school!"