php - 将字符串保留在请求 uri 中

标签 php wordpress apache .htaccess mod-rewrite

我正在构建一个支持英语和丹麦语两种语言的 Wordpress 网站。

我想在请求 uri 中保留英语的语言代码字符串 en 和丹麦语的 da

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

http://example.com/da

如果我访问帖子或页面,它应该是这样的 map :(这不起作用,得到 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 文件及其完美运行。

附言:
这个问题不是 Wordpress 网站特有的,我以后也需要这个帮助来处理基于自定义的网站。如果可以,请向我提供 .htaccess 规则/条件。

最佳答案

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

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

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

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

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

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

关于php - 将字符串保留在请求 uri 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21256805/

相关文章:

javascript - 如何删除一个json元素?

php - 无法从 CodeIgniter 中的 SQL-View 选择

php - 使用 jQuery 将事件添加到动态生成的元素

PHP 服务器循环

java - Apache OfBiz 可以与现有版本的 Tomcat 一起安装吗

php - 跨(子域?)维护 Assets 的最佳实践

javascript - 显示 : table-cell absolute positioning query

css - 单击响应式 ubermenu 时内容会跳转

wordpress - 缺少重力表单字段

apache - 如何在 apache vhost 中使用环境变量