Avatar billede barf Nybegynder
22. marts 2005 - 17:23 Der er 7 kommentarer og
1 løsning

hjælp til RewriteRule

Jeg har en side som benytter mod_rewrite. Når jeg kører siden på min localhost virker det hele, men når jeg uploader siden får jeg pludselig en HTTP Error 500 - Internal server error.

Min .htaccess fil ser lidt forenklet sådan her ud:
RewriteEngine on
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-F
RewriteRule ^([^/]+)/?$ /?level1=$1


Jeg har fundet ud af at når man fjerner spørgsmålstegnet i ^([^/]+)/?$, altså så det bliver til ^([^/]+)/$, virker det igen.

Jeg vil dog gerne have at / er valgfri, så man kan skrive både:
www.siden.dk/om/ og www.siden.dk/om

Hvad er der galt og hvordan kan jeg fikse det?
Avatar billede rednex Nybegynder
22. marts 2005 - 18:29 #1
Umiddelbart vil jeg tro at du skal escape '?', da dette betyder 1 eller ingen forekomst af tegnet foran. Altså kommer dit regex til at se sådan ud: ^([^/]+)/\?$
Avatar billede barf Nybegynder
23. marts 2005 - 08:18 #2
Jamen det er vel også korrekt at der skal være 0 eller 1 forwardslash /

Du kan lige få hele min rewrite rule:
RewriteRule ^([^/]+)/?([^/]*)/?([^/]*)/?([^/]*)/?([^/]*)/?$ /?level1=$1&level2=$2&level3=$3&level4=$4&level5=$5 [QSA,L]

Den ser overskuelig ud, men det er egentlig bare det samme regex igen og igen.

http://127.0.0.1/igangvaerende-projekter/solvangen/plantegning/a-lejlighederne/type-102-a/
Avatar billede barf Nybegynder
23. marts 2005 - 08:21 #3
Hov, kom til at ramme send-knappen :)

Det ovenstående link er et eksempel på hvordan et link kan se ud. Det link vil jeg så via min rewrite rule splitte op i 5 variabler ($level1, $level2 osv.) og sende til index.php

P.s. det hjalp ikke at escape ?-tegnet.
Avatar billede rednex Nybegynder
23. marts 2005 - 08:30 #4
Jeg tror faktisk du kan gøre det lidt smartere end det. PHP kan håndtere requests som ser sådan her ud: http://127.0.0.1/index.php/igangvaerende-projekter/...

Det gør jo din rewrite rule noget nemmere at arbejde med. Det kræver kun at PHP er installeret som module i stedet for CGI. Parametrene findes i $_SERVER['PATH_INFO'] og ser sådan her ud: /solvangen/plantegning/a-lejlighederne/type-102-a/. Derefter kan du lave en
list($l1, $l2, $l3, $l4, $l5) = explode('/', $_SERVER['PATH_INFO'], 5);
Avatar billede barf Nybegynder
23. marts 2005 - 21:52 #5
Hej igen rednex.
Jeg kan desværre ikke bruge dit forslag. Jeg får en:
Notice: Undefined index: PATH_INFO

Tilgengæld har jeg efter en laaaang kamp fået løst mit rewrite problem.
Af en eller anden grund er det meget begrænset hvad jeg kan benytte i mit regex, så der for kom det til at se sådan her ud (og ja, det er en grim måde at lave det på):

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)/(.+)/(.+)/(.+)/(.+)/$ /?level1=$1&level2=$2&level3=$3&level4=$4&level5=$5 [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)/(.+)/(.+)/(.+)/(.+)$ /?level1=$1&level2=$2&level3=$3&level4=$4&level5=$5 [NC]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)/(.+)/(.+)/(.+)/$ /?level1=$1&level2=$2&level3=$3&level4=$4 [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)/(.+)/(.+)/(.+)$ /?level1=$1&level2=$2&level3=$3&level4=$4 [NC]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)/(.+)/(.+)/$ /?level1=$1&level2=$2&level3=$3 [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)/(.+)/(.+)$ /?level1=$1&level2=$2&level3=$3 [NC]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)/(.+)/$ /?level1=$1&level2=$2 [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)/(.+)$ /?level1=$1&level2=$2 [NC]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)/$ /?level1=$1 [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ /?level1=$1 [NC]



Alt det ovenstående kan jeg på min egen server klare med:
RewriteRule ^([^/]+)/?([^/]*)/?([^/]*)/?([^/]*)/?([^/]*)/?$ /?level1=$1&level2=$2&level3=$3&level4=$4&level5=$5 [QSA,L]
Avatar billede rednex Nybegynder
23. marts 2005 - 23:45 #6
Ja køn er den ikke men hvis det ikke kan være anderledes.. :o)Men du fik da løst dit problem, og det er jo det der tæller.
Avatar billede japping Nybegynder
24. marts 2005 - 09:03 #7
rednex --> jeg vil sørge for at kigge ind på www.eksperten.dk hver hele time.
Avatar billede barf Nybegynder
26. marts 2005 - 12:16 #8
Jeg lukker lige her. Tak for hjælpen!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Uanset kodesprog, så giver vi dig mulighederne for at udvikle det, du behøver.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester