Apache GeoIP 重定向到带有问号的页面

哔叽

我遇到了 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章