将字符串保留在请求uri中

时间:2014-01-21 11:27:09

标签: php wordpress apache .htaccess mod-rewrite

我正在构建一个Wordpress网站,其中包含两种语言支持英语和丹麦语。

我希望将语言代码字符串en保留为英语,将da保留为请求uri中的丹麦语。

赞:(目前这对我有用)

http://example.com/da

如果我访问帖子或页面,它应该是这样的地图:(这不起作用,得到404)

http://example.com/da/post-name
http://example.com/da/page-name
http://example.com/da/post/is/too/long

我也试过Wordpress Rewrite API

add_rewrite_rule()(目前重写规则)

<?php
add_action('init', function () {    
    add_rewrite_rule(
        '^(da|en)/?', //Regex
        'index.php?lang=$matches[1]', //request to
        'top' //called earlier than wordpress rules
    );
});

还有add_rewrite_tag(),但我认为Wordpress只提供add_rewrite_endpoint(我根本不需要这个)。
我认为只有htaccess %{QUERY_STRING}条件可能才有可能吗? (不知道)

.htaccess内容:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

修改
我在管理页面上使用WP Native Dashboard进行翻译,但在前面我只使用__()_e().mo.po文件并且它的工作非常好。

P.S:
这个问题并不是针对Wordpress网站的,我将来也需要这个基于自定义网站的帮助。如果可以,请提供.htaccess规则/条件。

3 个答案:

答案 0 :(得分:4)

如果我是你,我会使用插件而不是从零开始实现。您可以将this插件用于多语言wp站点。这个插件为您提供了三种类型的url结构;

  1. ?lang=en
  2. /en/foo/
  3. en.yoursite.com
  4. 如果要用于自定义网站,可以使用以下重写规则;

    RewriteEngine On
    RewriteBase /
    RewriteRule ^(en|da)/(.*)$ /$2?language=$1 [QSA,L]
    

    我假设您正在使用language param语言

    编辑: qTranslate插件存在一些错误。使用名为qTranslate Slug的附加插件可以解决这些错误。如果您遇到网址模式问题,请不要忘记使用此附加插件

答案 1 :(得分:0)

我删除了我的答案,因为插件似乎应该处理重写的网址,例如example.com/da/post-name ...

当您访问任何URL时加载WP并显示“WP 404错误”。

编辑3:

根据您最后的评论,似乎一切都按预期工作:“现在我手动在网址中插入en / da ......”

答案 2 :(得分:0)

如果重写模块处于非活动状态,我希望您必须检查服务器设置。 从您的服务器保持重写模块处于活动状态。