ie和firefox在使用重写apache时无法读取cookie值

时间:2015-09-07 21:59:49

标签: php .htaccess internet-explorer firefox rewrite

我在使用IE和Firefox时有一个奇怪的问题,但Chrome和safari工作正常。虽然我试图使用多语言网站,我能够正确地将root页面重定向到所涉及的语言路径,基本上我有如下的PHP代码;

的common.php

<?php

session_start();
header('Cache-control: private'); // IE 6 FIX

if(isSet($_GET['lang'])) 
{
    $lang = $_GET['lang'];
    $_SESSION['lang'] = $lang;
    setcookie('lang', $lang, time() + (3600 * 24 * 30),'/');
}

else if(isSet($_SESSION['lang'])) 
{
    $lang = $_SESSION['lang'];
} 

else if(isSet($_COOKIE['lang'])) 
{
    $lang = $_COOKIE['lang'];
} 

else 
{
    $lang = 'en';
    $_SESSION['lang'] = $lang;
    setcookie('lang', $lang, time() + (3600 * 24 * 30),'/');
}


    switch ($lang) 
   {
        case 'en':
        $lang_file = 'lang.en.php';
        break;

        case 'tr':
        $lang_file = 'lang.tr.php';
        break;
    }

include_once($_SERVER['DOCUMENT_ROOT'] . '/lang/'.$lang_file);
?>

.htaccess如下;

RewriteEngine on

# do not use htaccess any of rule when php post
RewriteCond %{REQUEST_METHOD} =POST
RewriteRule ^ - [L]

# Redirect external .php requests to extensionless url
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.+)\.php$ /$1 [R=301,L]

# add extension if the php file exists:
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule (.*) $1.php [L]

# if cookie set turn /file to /en|tr/file
RewriteCond %{QUERY_STRING} !^lang= [NC]
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{HTTP_COOKIE} lang=(en|tr) [NC]
RewriteRule ^((?!(tr|en)).*)$ /%1/$1 [L,R=301]

# if cookie not set then /  to  /en/file
RewriteCond %{QUERY_STRING} !^lang=
RewriteCond %{HTTP_COOKIE} !lang=
RewriteRule ^((?!(tr|en)).*)$ /en/$1? [L,R=301]

# if cookie set then goto there root folder
RewriteCond %{QUERY_STRING} !^lang= [NC]
RewriteCond %{HTTP_COOKIE} lang=(en|tr)? [NC]
RewriteRule ^(?!(tr|en))$ /%1/$1 [L,R=301]

# get meanful /en|tr/file to /en|tr/file?lang=en|tr
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(tr|en)/(.*)$ /$2?lang=$1 [L]

一旦我尝试请求/,它应该读取cookie值并根据cookie值转向/en//tr/但是,在ie和firefox上它不起作用。

任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

删除重定向类型301后,代码适用于所有浏览器。不过,我不确定这一举动会如何影响SEO。

RewriteEngine on

# do not use htaccess any of rule when php post
RewriteCond %{REQUEST_METHOD} =POST
RewriteRule ^ - [L]

# Redirect external .php requests to extensionless url
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.+)\.php$ /$1 [R=301,L]

# add extension if the php file exists:
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule (.*) $1.php [L]

# if cookie set turn /file to /en|tr/file
RewriteCond %{QUERY_STRING} !^lang= [NC]
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{HTTP_COOKIE} lang=(en|tr) [NC]
RewriteRule ^((?!(tr|en)).*)$ /%1/$1 [L,R]

# if cookie not set then /  to  /en/file
RewriteCond %{QUERY_STRING} !^lang=
RewriteCond %{HTTP_COOKIE} !lang=
RewriteRule ^((?!(tr|en)).*)$ /en/$1? [L,R]

# if cookie set then goto there root folder
RewriteCond %{QUERY_STRING} !^lang= [NC]
RewriteCond %{HTTP_COOKIE} lang=(en|tr)? [NC]
RewriteRule ^(?!(tr|en))$ /%1/$1 [L,R]

# get meanful /en|tr/file to /en|tr/file?lang=en|tr
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(tr|en)/(.*)$ /$2?lang=$1 [L]