我遇到了 GeoIP 重定向的绊脚石(Apache/2.4.6 (CentOS))
.htaccess 具有强制性指令(功能必需,更改可能会破坏整个站点)
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
所以当我添加到 .htaccess 一个 GeoIP 规则时
RewriteCond "%{ENV:GEOIP_COUNTRY_CODE}" ^DE$
RewriteRule ^/?index\.php$ http://de.example.com/info.html$1 [L]
它工作正常,但是当我想设置类似的重定向到带有翻译的页面时
RewriteCond "%{ENV:GEOIP_COUNTRY_CODE}" ^DE$
RewriteRule ^/?index\.php$ http://de.example.com/?lang=de$1 [L]
我有错误“重定向太多”。
在 .htaccess 中禁用 GeoIP 并直接访问http://de.example.com/?lang=de - 一切正常。
已经花了几个小时在语法上玩,但仍然无法找出问题所在,所以感谢任何尝试的想法!
您很可能不想执行将您的内部 URL 暴露给客户端的外部重定向。您想要的(大概)是检测 GEOIP 国家并在此基础上添加具有相同国家代码的查询参数。lang=
当查询参数已经存在时,您需要添加一个否定条件来停止重写。
您可以在 .htaccess 中尝试此代码:
RewriteEngine On
RewriteCond "%{ENV:GEOIP_COUNTRY_CODE}" ^DE$
RewriteCond %{QUERY_STRING} !(^|&)lang= [NC]
RewriteRule ^/?(index\.php)?$ $0?lang=de [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
确保在测试此更改之前清除浏览器缓存。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句