我面临一个问题500服务器错误,我尝试重定向用户到一个不同的URL取决于他的原籍国使用。htaccess文件和GEOIP,我使用Codeigniter 3。
错误500:Is [Fri Jul 15 15:37:32.432374 2022] [core:error] [pid 3029:tid 140071902476032] [client 86.235.179.208:0] AH00124: Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.
我想这样做:https://example.com
---->https://example.com/fr/
下面是添加代码之前的脚本: <>以前RewriteEnginerewritecsecond %{REQUEST_FILENAME}rewritecsecond %{REQUEST_FILENAME}^(.*)$ index.php?/$1 [L]加上代码后:
<>以前RewriteEnginerewritecsecond %{HTTP: x - forward - country} ^法国$rewriterrule ^([^/]+)$/fr/[L]rewritecsecond %{REQUEST_FILENAME}rewritecsecond %{REQUEST_FILENAME}^(.*)$ index.php?/$1 [L]提前感谢您的帮助。
评论表明您实际上是在尝试以特定国家/地区的方式重定向请求。但这并不是你所实现的。
看一下这个稍微修改过的变体:
RewriteEngine On
RewriteCond %{HTTP:X-FORWARDED-COUNTRY} ^France$
RewriteCond %{REQUEST_URI} !^/fr/
RewriteRule ^ /fr%{REQUEST_URI} [R=301,END]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ /index.php?%{REQUEST_URI} [L]
修改实际上应该从外部重定向请求而不使用/fr/
前缀(如果适用)。如果重定向已经在之前的往返中应用,则会阻止重定向的附加条件,从而阻止重写循环。并不是说我没有测试过,我只是在这里画了个草图。您可能需要调整它以适应您的特定设置。
请记住始终使用一个新的匿名浏览器窗口进行测试。此外,使用R=302
临时重定向也是一个好主意,只有在您满意后才将其更改为R=301
永久重定向。这可以防止客户端出现严重的缓存问题。
您可以在http服务器的主机配置中实现这些规则。如果您没有访问权限,您也可以使用分布式配置文件(".htaccess"),它应该位于http主机的DOCUMENT_ROOT
文件夹中。