htaccess 和 GEOIP 无限循环

Posted

技术标签:

【中文标题】htaccess 和 GEOIP 无限循环【英文标题】:htaccess and GEOIP infinite loop 【发布时间】:2014-04-28 16:34:40 【问题描述】:

我在我的 htaccess 中写了这个:

GeoIPEnable On 
RewriteEngine On
RewriteCond %ENV:GEOIP_COUNTRY_CODE PE
RewriteCond %HTTP_HOST myweb.com [NC]
RewriteCond %HTTP_HOST !es [NC]
RewriteCond %REQUEST_URI !^/es/ [NC]
RewriteRule ^(.*)$ /es/$1 [R,L] 

SetOutputFilter DEFLATE
AddOutputFilterByType DEFLATE text/html text/css application/x-javascript
RewriteCond %REQUEST_FILENAME -s [OR]
RewriteCond %REQUEST_FILENAME -l [OR]
RewriteCond %REQUEST_FILENAME -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

我希望来自秘鲁和其他国家/地区的用户被重定向到http://myweb.com/es

但是我得到了一个错误: http://myweb.com/es/es/es/es/es/es/es/...s/es/es/es/es/ 我该如何解决? 谢谢。

【问题讨论】:

【参考方案1】:

当它已经是/es/时,使用否定的前瞻正则表达式来避免重定向:

GeoIPEnable On 
RewriteEngine On

RewriteCond %REQUEST_URI !\.(jpe?g|gif|bmp|png|tiff|css|js)$ [NC]
RewriteCond %REQUEST_URI !^/(es/|index\.php) [NC]
RewriteCond %ENV:GEOIP_COUNTRY_CODE PE
RewriteCond %HTTP_HOST myweb\.com$ [NC]
RewriteCond %HTTP_HOST !es [NC]
RewriteRule ^(.*)$ /es/$1 [R,L] 

【讨论】:

:( ,我在 google chrome 上遇到了同样的错误,我已经用完整的 htaccess 更新了我的帖子 为了测试只需注释掉所有其他规则并只保留这个 好的,现在页面正在加载,但 url 没有改变它保持:myweb.com ok 注释掉RewriteCond %ENV:GEOIP_COUNTRY_CODE PE 我犯了一个错误,我删除了这一行:RewriteEngine On, now the url is myweb.com/es 但是我得到了 404 错误。

以上是关于htaccess 和 GEOIP 无限循环的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess重写导致无限循环

一个简单的 301 重定向会在我的 htaccess 中创建一个无限循环?

GeoIP 重定向循环 - 如何解决?

为啥这会导致无限请求循环?

为啥这会导致无限请求循环?

无限循环旧索引文件旧WP安装到新