我在使用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上它不起作用。
任何帮助都会受到赞赏。
答案 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]