2010-10-08 9 views
1

RewriteRule j'utilise la règle suivante pour redirigent jolies urls http://hostname.co.za/geoip/123.12.123.34-http://hostname.co.za/geoip/index.py?ip=123.12.123.34fullstops multiples dans regex pour

.htaccess dans/geoip

RewriteEngine on 
RewriteRule ^(.*\..*\..*\..*)$ /geoip/index.py?ip=$1 

Cela fonctionne bien pour correspondre seulement les IP, mais quand J'essaie cela, il donne une erreur de 500 serveurs:

RewriteEngine on 
RewriteRule ^(.*\..*)$ /geoip/index.py?ip=$1 

Je veux faire correspondre non seulement IP, mais hostnam es avec au moins un fullstop également. Je ne sais pas pourquoi cela ne devrait pas fonctionner ...

+0

Pourriez-vous chercher le message d'erreur probable expliquant l'erreur 500 dans le journal d'erreur apache? – SirDarius

Répondre

2

Le problème avec le deuxième modèle est qu'il correspond également à index.py et donne donc une récursion infinie. Vous pouvez exclure que l'aide d'un RewriteCond:

RewriteCond $1 !=index.py 
RewriteRule ^(.*\..*)$ /geoip/index.py?ip=$1 

De plus, vous devez utiliser un modèle plus précis que .* comme [^/.]+, donc:

RewriteCond $1 !=index.py 
RewriteRule ^([^/.]+\.[^/.]+)$ /geoip/index.py?ip=$1 
RewriteRule ^([^/.]+\.[^/.]+\.[^/.]+\.[^/.]+)$ /geoip/index.py?ip=$1 
+0

Merci, l'index.py était le problème - trié avec la règle RewriteCond. – bluegray

+0

@bluegray: Pour montrer votre appréciation, veuillez accepter la réponse de Gumbo (cliquez sur la coche à côté). –