.htaccess RewriteCond

Status
Niet open voor verdere reacties.

codlevi

Gebruiker
Lid geworden
13 jul 2010
Berichten
88
Hallo allemaal

Ik ben al twee weken aan het zoeken voor een oplossing voor het volgende.
Ik heb een .htaccess geschreven om de query string te herschrijven naar een path.
De derde en de vierde RewriteRule lijnen werken, maar de eerste en de tweede niet.
Volgens mij moet je hiervoor een RewriteCond gebruiken met {$QUERY_STRING}, maar ik heb me tevergeefs kapotgezocht naar iets dat werkt.
Kan iemand me helpen a.u.b?

Code:
# Begin niet werkende lijnen
RewriteRule ^contact/([^/]*)/([^/]*)\/?$ /contact.php?type=$1&actie=$2 [L]
RewriteRule ^contact/([^/]*)/([^/]*)\/?$ /contact.php?type=$1&resultaat=$2 [L]
# Eind niet werkende lijnen
RewriteRule ^contact/([^/]*)\/?$ /contact.php?type=$1 [L]
RewriteRule ^contact/?$ /contact.php [L]
 
Kun je aangeven hoe je verwacht dat de input eruit zal zien?

Overigens kun je met twee exact dezelfde rules natuurlijk nooit twee resultaten krijgen. Dus in dit geval gaat de tweede regel nooit uitgevoerd worden. Je kunt dit inderdaad ondervangen met conditions, maar dat kan alleen als je de input kan onderscheiden.
 
Kun je aangeven hoe je verwacht dat de input eruit zal zien?

Overigens kun je met twee exact dezelfde rules natuurlijk nooit twee resultaten krijgen. Dus in dit geval gaat de tweede regel nooit uitgevoerd worden. Je kunt dit inderdaad ondervangen met conditions, maar dat kan alleen als je de input kan onderscheiden.

Hey

Bedankt voor je reactie.

De output was ik inderdaad vergeten
Voor rule 1: contact/<type>/<actie> bv.: contact/formulier/verzenden
Voor rule 2: contact/<type>/<resultaat> bv.: contact/formulier/mislukt

De eerste rule is voor het verzenden van het contactformulier, die leid naar verzenden.php en daarna, als de mail verzonden is, redirect die je weer naar /contact/formulier/succes, of als het misging naar contact/formulier/mislukt

Die type staat er omdat ik meerdere manieren heb op contact op te nemen op mijn site.
Die actie staat er om te zeggen dat ie moet worden verzonden.
Die resultaat staat er om te zeggen of de e-mail wel of niet verzonden is.
 
Volgens mij wordt dat zoiets:
Code:
RewriteCond %{REQUEST_URI} !^/contact/[^/]+/success/?$
RewriteCond %{REQUEST_URI} !^/contact/[^/]+/mislukt/?$
RewriteRule ^contact/([^/]+)/([^/]+)/? /contact.php?type=$1&actie=$2
#de URL is al herschreven, dus success+mislukt komt automatisch hier
RewriteRule ^contact/([^/]+)/([^/]+)/? /contact.php?type=$1&resultaat=$2

getest op mijn rommelserver, maar ik kan natuurlijk niet alle omstandigheden nabootsen
 
Volgens mij wordt dat zoiets:
Code:
RewriteCond %{REQUEST_URI} !^/contact/[^/]+/success/?$
RewriteCond %{REQUEST_URI} !^/contact/[^/]+/mislukt/?$
RewriteRule ^contact/([^/]+)/([^/]+)/? /contact.php?type=$1&actie=$2
#de URL is al herschreven, dus success+mislukt komt automatisch hier
RewriteRule ^contact/([^/]+)/([^/]+)/? /contact.php?type=$1&resultaat=$2

getest op mijn rommelserver, maar ik kan natuurlijk niet alle omstandigheden nabootsen

Bedankt voor je moeite man!:thumb:

Kun je me nog even uitleggen waarom je ([^/]*) hebt vervangen door ([^/]+) en wat [^/]+ doet.
Ik ben helemaal nieuw bij .htaccess en van die cheat sheets begrijp ik tot nu toe nog echt niks.

Ik ga het nu direct testen!
 
Laatst bewerkt:
Het verschil tussen "*" en "+" is:

*: 0 of meer
+: 1 of meer

Daar er altijd iets tussen slashes hoort te staan is + beter en veiliger. mijnsite/contact/// matched ook met "*" maar niet met "+"

Er is geen functioneel verschil tussen ([^/]+) en [^/]+ . Alleen tussen haakjes wordt opgeslagen als variabele. Het eerste argument dat tussen haakjes staat is $1, tweede argument is $2, derde element tussen haakjes is $3, etc. Daar ik niks op wil slaan in de conditions staan daar geen haakjes. Dit is wel mogelijk, maar onnodig. als je de haakjes plaatst veranderd er niets aan de werken, behalve dat de server dan onnodig variabelen op gaat slaan.
 
Het werkt perfect!
Echt bedankt voor je hulp en uitleg!:thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan