WPML

如果 WPML 不允许您选择语言目录(例如,西班牙语的 http://example.com/es/),这是因为它在尝试访问该 URL 时遇到错误。您可以检查以下内容以确保语言目录能够正常工作。


要使语言目录正常工作,您需要进行以下设置:

  1. 启用 URL 重写。

  2. 允许 WordPress 拥有文件夹的读写访问权限。

  3. 确保您的网站使用“漂亮”的固定链接结构。

如您所见,无需在服务器上创建物理目录。选择将语言放置在目录中是通过重写 URL 实现的。

WPML 如何确定是否可以在目录中启用语言


WPML 会尝试访问一个测试调用,以检查目录中的语言是否有效。该测试调用为:
yourdomain/LANGUAGE/?____icl_validate_domain=1

例如,要检查我们自己的域名 (wpml.org) 是否启用了西班牙语,我们可以在浏览器中访问以下 URL:

http://wpml.org/es/?____icl_validate_domain=1

执行此操作时,您会看到一个看似空白的页面。右键单击该页面,然后选择查看网页源代码。您应该会看到以下内容:

<!--http://wpml.org-->

这会告诉 WPML,WordPress 允许访问此 URL 结构。如果调用通过,WPML 将允许按目录使用语言。否则,您将收到某种(在一定程度上)解释问题所在的提示信息。

如果 WPML 看到错误页面,它将禁用此功能并输出红色错误消息,其中包含被禁用的可能原因。

重要提示:WPML 通过对其执行 fopen 调用来访问验证 URL。通常,这与浏览器的操作类似,但并不完全相同。请确保您的服务器上启用了 fopen。您可以将以下内容添加到 PHP 配置文件中,以确保它未被阻止:

SecFilterEngine Off

确保 WordPress 启用了 URL 重写


为了启用 URL 重写,WordPress 会在其安装文件夹中创建一个名为 .htaccess 的文件。如果您使用的是除默认 URL 之外的任何 URL,WordPress 就会创建此文件。该文件应包含以下内容:
# BEGIN WordPress

<IfModule mod_rewrite.c>

  RewriteEngine On

  RewriteBase /

  RewriteCond %{REQUEST_FILENAME} !-f

  RewriteCond %{REQUEST_FILENAME} !-d

  RewriteRule . /index.php [L]

</IfModule>

# END WordPress

如果该文件不存在,请尝试创建它。如果存在但为空,请复制这些内容并保存。

能够重写 URL 意味着什么?


URL 重写是一个复杂的机制,WordPress 经常使用它。为此,Web 服务器(通常是 Apache)需要能够重写 URL,并且必须允许 WordPress 管理重写逻辑。

在 Apache 中,由 mod-rewrite 执行 URL 重写。这是一个非常标准的模块,默认处于启用状态。如果您使用的是 Apache 并且无法激活语言目录,请检查您的网站是否已激活 mod-rewrite。如果您不确定具体操作,请发送电子邮件给您的主机提供商。您可以使用以下内容:

您好!

我想要使用的一个 WordPress 插件需要启用 mod-rewrite 模块。能否请您帮我检查一下,并告诉我我的网站 http://example.com 是否已启用 mod-rewrite?


假设它已启用,WordPress 现在需要能够控制 URL 重写规则。为此,WordPress 必须能够写入其安装文件夹。

确保 WordPress 拥有文件夹的读写访问权限


同样,如果您使用的是 Apache,请找出 Apache 是在哪个用户下运行的,并允许该用户对 WordPress 安装文件夹具有读写访问权限。您可以使用 FTP 程序、通过 shell 或通过电子邮件来执行此操作。
再次打扰,

我需要您再帮个忙。我已将 WordPress 安装在此目录中:

YOUR_WP_INSTALL_DIRECTORY

您能更改整个目录(递归)的文件权限,以便 Web 服务器可以在其中进行读取和写入吗?我需要 WordPress 能够写入某些文件。


现在,请再次检查。
您的网站需要使用“漂亮”的固定链接结构。您可以在 WordPress 设置中更改网站的固定链接结构。

故障排除


如果您使用 CDN(例如 Cloudflare),它可能会通过删除 HTML 注释来阻止目录中的语言正常工作。因此,您可能会看到一个误报错误,该错误会显示一条与 ?____icl_validate_domain=1 相关的警告,但前端没有任何问题。

需要帮助?


如果仍然无法正常工作,请在WPML 支持中提出问题。

作者:Amir · 最后更新时间:2024年10月18日