Несколько полных остановок в регулярном выражении для RewriteRule - PullRequest
1 голос
/ 08 октября 2010

Я использую следующее правило для перенаправления симпатичных URL-адресов с http://hostname.co.za/geoip/123.12.123.34 на http://hostname.co.za/geoip/index.py?ip=123.12.123.34

.htaccess in / geoip

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

Это прекрасно работает, чтобы соответствовать только ip, но когда я пытаюсь это сделать, выдает 500 ошибку сервера:

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

Я хочу сопоставить не только IP-адреса, но и имена хостов хотя бы с одним полным остановом. Я понятия не имею, почему это не должно работать ...

1 Ответ

2 голосов
/ 08 октября 2010

Проблема со вторым шаблоном в том, что он также соответствует 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
...