正确路由到语言子文件夹

时间:2016-03-13 16:59:42

标签: php .htaccess mod-rewrite

我对mod-rewrite和php感到有些困惑,请你帮忙。

现在,我有一个简单的htaccess规则如下:

RewriteRule ^en/(.*)$ /$1 [QSA,L]
RewriteRule ^de/(.*)$ /$1 [QSA,L]

如何检查“en”或“de”之后是否被定义为文档后的第一个“部分”(www.mydomain.net/en oder www.mydomain.net/de或www.mydomain.net )为了包含适当的语言文件,然后使用:

include_once(dirname(__FILE__) . "/../languages/lang." . $lang . ".php");

我已经玩过请求URI和dirname,但到目前为止我无法使用它。

除此之外:我还需要附加mod-rewrite规则以支持www.mydomain.net/en/admin/settings等网址?

非常感谢任何帮助,谢谢...

2 个答案:

答案 0 :(得分:1)

在你的htaccess中有这个:

RewriteEngine On    
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(de|en)/(.*)$ /index.php?lang=$1&route=$2 [L,QSA]

在index.php中,像这样抓住它们:

$lang = $_GET['lang']; // echo $lang, prints 'en' or 'de'
$route= $_GET['route']; //echo $route prints everything after slash.

请勿忘记将所有与webroot相关的CSS和图像文件引用为" /includes/css.css"

对于您的主页http://example.com/

$route将为空

示例网址:http://example.com/de/admin/settings

$langde$route将为admin/settings

希望这有帮助。

答案 1 :(得分:0)

首先:感谢您的帮助,它指出了正确的方向。

当有人打开我的某个网址时,我会使用以下代码将整个(请求)网址保存到变量中:https://stackoverflow.com/a/10133524/989978

之后,我使用explode()按照Mike Rockett的建议解压缩语言文件夹。但是,我使用以下函数执行此操作:https://stackoverflow.com/a/23856628/989978

有了这个,我可以轻松地包含相应的语言文件,并在没有提供任何内容的情况下定义默认的回退。幸运的是,它还使我能够使用具有多个子文件夹的网址,一切正常。

我要考虑的下一件事是,我如何提供多语言网址(en:... / user / settings vs. de:... / benutzer / einstellungen),但我再次吸取教训:首先使用大脑,然后尝试搜索stackoverflow; - )

再次感谢你们。