使用htaccess为不同语言创建不同的URL

时间:2016-03-16 12:20:52

标签: php .htaccess

我正在尝试为不同的语言创建不同的网址,例如http://localhost/shift/en 没有" en"是一个实际的文件夹(shift是一个实际的子文件夹)。我想要' en'是我可以在我的PHP代码中使用的变量。以下是我的htaccess的样子:

RewriteEngine On

# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /shift/$1 [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ public/index.php [QSA,L]

RewriteRule ^(en|de|fr)/(.*)$  $2?lang=$1 [L,QSA]
RewriteRule ^(.*)$  $1?lang=en [L,QSA]

这是我的PHP代码:

var_dump($_GET['lang']);

当我转到http://localhost/shift/en时,它会给我404和PHP错误:"未定义索引:lang"。

1 个答案:

答案 0 :(得分:1)

您需要像这样编辑.htaccess -

RewriteEngine On RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?lang=$1 RewriteRule ^([a-zA-Z0-9_-]+)/$ index.php?lang=$1

index.php

echo $_GET['lang'];

如果网址为 - http://example.com/en,那么输出将为 - en

然后你可以用语言做其他事情。

如果您想提供不同版本的页面,我建议您使用每种语言的页面,并在网址中要求使用该语言时将其包含在内。

例如 - 如果某人键入http://example.com/en,则需要在 index.php 中执行此操作 -

 if($_GET['lang']=="en") {
     $_SESSION['language']="en"; //Adding a session makes your life easier
     include("en.php");
 //everything else
    }

我更新了重写规则。看看吧。