将字符串保留在请求uri中

Rah*_*zir 5 php apache wordpress .htaccess mod-rewrite

我正在建立一个Wordpress网站,提供两种语言支持英语和丹麦语.

我想保留en英语和da丹麦语的语言代码字符串作为请求uri的前缀.

喜欢:(目前这对我有用)

http://example.com/da
Run Code Online (Sandbox Code Playgroud)

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

http://example.com/da/post-name
http://example.com/da/page-name
http://example.com/da/post/is/too/long
Run Code Online (Sandbox Code Playgroud)

我也尝试过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
    );
});
Run Code Online (Sandbox Code Playgroud)

而且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
Run Code Online (Sandbox Code Playgroud)

编辑:
我正在使用WP Native Dashboard在管理页面上进行翻译,但是在前面我只是使用__()_e()使用.mo.po文件,它的工作完美.

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

Hüs*_*BAL 4

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

  1. ?lang=en
  2. /en/foo/
  3. en.yoursite.com

如果您想用于自定义站点,您可以使用以下重写规则;

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

我假设您正在使用language语言参数

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

  • 还使用 qtranslate。Slug 用于固定。一些。虫子 (2认同)