【问题标题】:htaccess language based virtual subfolders基于 htaccess 语言的虚拟子文件夹
【发布时间】:2014-08-06 19:38:32
【问题描述】:

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

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

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来创建这样的系统?

【问题讨论】:

    标签: php apache .htaccess mod-rewrite redirect


    【解决方案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

    【讨论】:

    • 这几乎解决了我的问题,但是当我尝试输入 /user 时,它仍然将我重定向到 /en//user
    • 修正删除//,改成/en/user
    • 非常感谢,使用 RewriteCond %{REQUEST_URI} ^(.*)//(.*)$ RewriteRule 更正了它。 %1/%2 [R=301,L]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 1970-01-01
    • 2014-11-28
    • 2012-04-21
    • 2012-11-22
    相关资源
    最近更新 更多