加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

GET参数通过php未读取的.htaccess子域传递

发布时间:2020-12-13 15:57:11 所属栏目:PHP教程 来源:网络整理
导读:脚本 我有以下代码: test.php的 ?phpif(empty($_GET['lang'])){ $user_language = explode("-",$_SERVER['HTTP_ACCEPT_LANGUAGE']); $language = $user_language[0]; header('Location: http://'.$language.'.localhost'.$_SERVER['REQUEST_URI']);}else{ $
脚本

我有以下代码:

test.php的

<?php
if(empty($_GET['lang'])){
    $user_language = explode("-",$_SERVER['HTTP_ACCEPT_LANGUAGE']);
    $language = $user_language[0];
    header('Location: http://'.$language.'.localhost'.$_SERVER['REQUEST_URI']);
}
else{
    $lang = $_GET['lang'];
    $content = array("en"=>"This is a test.","it"=>"Questo è un test.");
    echo $content[$lang];
}
?>

的.htaccess

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^.localhost$
RewriteRule (.*) - [QSA,E=LANG:%1]
RewriteRule (.*) $1?lang=%{ENV:LANG} [QSA]

我的代码应该做什么

如果未定义$_GET [‘lang’],则从其浏览器发送的标题中获取用户的语言,并将其重定向到与其语言对应的子域:子域应与$_GET [‘lang’]重合.

什么不起作用

通过访问localhost / test.php,我被重定向到正确的子域,但重定向无休止地循环.
另外,如果我访问en.localhost / test.php并且我的语言是意大利语,我会在循环之前重定向到it.localhost / test.php.

我的问题

我怎么解决这个问题?

解决方法

您可以使用:

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP:Accept-Language} ^([a-z]{2}) [NC]
RewriteRule ^ - [E=LANG:%1]

RewriteCond %{QUERY_STRING} !(?:^|&)lang= [NC]
RewriteCond %{HTTP_HOST} ^(?:[^.]+.)?(localhost)$
RewriteRule (.*) http://%{ENV:LANG}.%1/$1?lang=%{ENV:LANG} [QSA,L,R=302]

test.php的:

<?php
    $lang = $_GET['lang'];
    $content = array("en"=>"This is a test.","it"=>"Questo è un test.");
    echo $content[$lang];
?>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读