.htaccess
# Remove .php extension
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [L]
# Return 404 if original request is .php
RewriteCond %{THE_REQUEST} "^[^ ]* .*?\.php[? ].*$"
RewriteRule .* - [L,R=404]
这可以正常工作,但是如何修改代码以使基于this code的语言切换有效?
当前它正在执行以下操作:
localhost/index = OK
localhost/index.php = OK (404 error)
但是当您按下按钮时
<a href="?la=en">EN</a>
它将如下更改地址
localhost/index => localhost/index.php?la=en = FAIL (404 page)
也会引发404错误。有可能预防吗?是否只会阻止在查询字符串之前添加.php?我希望语言切换也能正常工作,可以吗?有什么想法吗?
语言开关:
<?php
session_start();
if($_GET['la']){
$_SESSION['la'] = $_GET['la'];
header('Location:'.$_SERVER['PHP_SELF']);
exit();
}
switch($_SESSION['la']){
case "eng":
require('lang/eng.php');
break;
case "fre":
require('lang/fre.php');
break;
case "ger":
require('lang/ger.php');
break;
default:
require('lang/eng.php');
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title><?php echo $lang['index-title'];?></title>
<link href="style/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="wrapper">
<div id="langSelect">
<a href="index.php?la=eng"><img src="flags/eng.png" alt="<?=$lang['lang-eng'];?>" title="<?=$lang['lang-eng'];?>" /></a>
<a href="index.php?la=fre"><img src="flags/fra.png" alt="<?=$lang['lang-fre'];?>" title="<?=$lang['lang-fre'];?>" /></a>
<a href="index.php?la=ger"><img src="flags/ger.png" alt="<?=$lang['lang-ger'];?>" title="<?=$lang['lang-ger'];?>" /></a>
</div>
<div id="cont">
<p><?=$lang['index-welcome'];?></p>
<p><?=$lang['index-text-1'];?></p>
</div>
</div>
</body>
</html>
已解决!
替换:
header('Location:'.$_SERVER['PHP_SELF']);
使用:
header('Location:'. str_replace(".php", "", $_SERVER['PHP_SELF']));
答案 0 :(得分:2)
问题出在:header('Location:'.$_SERVER['PHP_SELF']);
$ _ SERVER [“ PHP_SELF”]是一个超级全局变量,它返回 当前正在执行的脚本的文件名。
将其更改为:
header('Location:'. str_replace(".php", "", $_SERVER['PHP_SELF']));
从字符串中删除扩展名。 希望对您有所帮助。