2010-10-08 24 views
1

我用下面的規則,以漂亮的網址,http://hostname.co.za/geoip/123.12.123.34重定向到http://hostname.co.za/geoip/index.py?ip=123.12.123.34多fullstops用於重寫規則

的.htaccess中/ geoip的

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

這工作得很好,以僅匹配IP的,但是當我試試這個,它給出了一個500服務器錯誤:

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

我想匹配不僅ip的,但是,至少有一個完全停止。 我不知道爲什麼這不應該工作...

+0

你能尋找可能的錯誤消息,說明500錯誤在Apache錯誤日誌? – SirDarius 2010-10-08 10:40:31

回答

2

第二種模式的問題是,它也匹配index.py,從而產生無限遞歸。您可以通過使用RewriteCond排除:

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

此外,你應該使用比.*[^/.]+更具體的模式,因此:

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

謝謝,index.py是問題 - 用RewriteCond規則排序。 – bluegray 2010-10-08 11:00:19

+0

@bluegray:爲了表示您的讚賞,請接受Gumbo的回答(點擊旁邊的複選標記)。 – 2010-10-08 11:15:16