我对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等网址?
非常感谢任何帮助,谢谢...
答案 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
$lang
将de
而$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; - )
再次感谢你们。