基于htaccess语言的虚拟子文件夹

时间:2014-06-16 21:52:38

标签: php apache .htaccess mod-rewrite redirect

好近, 我正在尝试为用户的浏览器语言创建虚拟子文件夹。

所以我有以下文件夹结构:

www/
    Core/
        Classes/
            Autoloader.Class.php
            Smarty.Class.php
            Database.Class.php
            LoadingOrder.json
        Libraries/
            Smarty.Class.BC.php
            Smarty.Class.php
            SmartyModules/
                ..
        Modules/
            Autoloader.Module.php
            Wall.Module.php
            Account.Module.php
            LoadingOrder.json
        Engine.php
        Initialize.php
    Templates/
        Default/
            css/
                main.css
                style.css
                ErrorHandler.css
            images/
            javascript/
                jquery.js
            Main.tpl
            User.tpl
            ErrorHandler.tpl
    .htaccess
    index.php
    user.php
    ErrorHandler.php

我需要的是创建多语种网站。

例如: 用户想要访问他/她的页面:http://site.domain/user

我想要实现的是,基于他的浏览器语言,它会将他重定向到 http://site.domain/en/user - 如果他说英语,
http://site.domain/ru/user - 如果他说俄语, http://site.domain/pt/user - 如果他说葡萄牙语。

问题是,这些语言子文件夹应该只是虚拟的,并且它们的所有请求都应该仅用于user.php,这是根目录中的一个。

我一直在谷歌,并发现在http://battle.net - 有这样的系统。

那么可以通过htaccess或纯粹的php创建这样的系统吗?

1 个答案:

答案 0 :(得分:1)

将此代码放入DOCUMENT_ROOT/.htaccess文件中:

RewriteEngine On

RewriteCond %{HTTP:Accept-Language} ^([a-z]{2})- [NC]
RewriteRule ^user/?$ /%1%{REQUEST_URI} [L,NC,R]

RewriteRule ^([a-z]{2})/(user)/?$ /$2.php?lang=$1 [L,NC,QSA]

这会在浏览器中将/user重定向到/en/user,但会以静默方式加载/user.php?lang=en