【发布时间】:2015-09-07 21:59:48
【问题描述】:
我在使用 IE 和 firefox 时遇到了一个奇怪的问题,但是 chrome 和 safari 工作正常。当我尝试使用多语言站点时,我能够正确地将根页面重定向到所涉及的语言路径,基本上我有如下的 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 上它不起作用。
任何帮助将不胜感激。
【问题讨论】:
-
你没有缩进你的代码?
-
没有涉及特定代码,因为它们是常规的 php 文件,因为用于网页包括 common.php。问题应该与我假设的 .htaccess 或 ie/firefox 有关。
-
您是否尝试过从 301 永久重定向中清除浏览器缓存并改用 302 重定向?
-
@linuxman 我说的是 PHP 代码。我发现阅读没有缩进的代码非常困难。
-
我确实尝试清除浏览器缓存和 cookie。 302 类型的重定向对于 seo 友好的网站来说不是一个好的解决方案,但我没有尝试。
标签: php .htaccess internet-explorer firefox rewrite