1

我最近将一个相当大的网站(约 6,000 个帖子)从 Drupal 迁移到了 Wordpress。作为该过程的一部分,我将 Drupal 创建的 url 别名迁移到 Wordpress 以用于 SEO 和链接保留。

Drupal 创建的一个在 Drupal 中运行良好的 url 别名示例:

  • /故事/这将成为另一个拉尼娜年

Wordpress 中的该 url 返回 404。但是,这有效:

  • /故事/这将是另一个拉尼娜年

看来我最好的选择是在将 URL 传递给 Wordpress 之前,在 htaccess 中将通用国际字符写入英文字符集重写规则。

知道我该怎么做吗?非常感谢您提供的任何帮助。马特。

4

2 回答 2

0

似乎在 wordpress 中可能有更好的方法来执行此操作,您可能想通过wordpress Trac 票证做一个快速浏览器,可能有一些补丁或临时修复问题。但是,如果您需要使用 htaccess/redirect 方法,您可以使用RewriteMap清理和重定向(如果需要)或显式重定向非 ascii 字符。

RewriteMap 需要访问服务器或虚拟主机配置来设置映射。它可以像/stories/will-this-be-another-la-niña-year映射到的 URI列表一样简单http://yourdomain.com/stories/will-this-be-another-la-nina-year(所有 ascii URL,这http://很重要,因为它告诉 mod_rewrite 重定向浏览器)。或者您可以编写一个脚本来查找非 ascii 字符并将它们替换为适当的 ascii 字符。

文字映射:

RewriteMap sanitize txt:/path/to/uri_mapping.txt

脚本映射:

RewriteMap sanitize prg:/path/to/sanitize_script.php

然后在您的 htaccess 文件中,您可以像这样调用此映射(这些规则需要高于wordpress 规则,因为您希望在wordpress 获取它们之前对 URI 进行清理。

RewriteRule ^(.*)$ /${sanitize:$1|$1} [L]

如果您无权访问服务器/虚拟主机配置,则必须枚举 htaccess 文件中的可能性,再次将这些规则置于 wordpress 规则之上:

# replace ñ
RewriteRule ^(.*)ñ(.*)$ /$1n$2 [R=301,L]

# replace ú
RewriteRule ^(.*)ú(.*)$ /$1ú$2 [R=301,L]

等等

于 2012-08-03T16:45:55.913 回答
0

我刚刚在 .htaccess 文件的开头添加了以下几行,它可以工作:

RewriteRule ^(.*)é(.*)$ /$1e$2 [R=301,L]
RewriteRule ^(.*)è(.*)$ /$1e$2 [R=301,L]
RewriteRule ^(.*)ê(.*)$ /$1e$2 [R=301,L]
RewriteRule ^(.*)î(.*)$ /$1i$2 [R=301,L]
RewriteRule ^(.*)ô(.*)$ /$1o$2 [R=301,L]
RewriteRule ^(.*)û(.*)$ /$1u$2 [R=301,L]
RewriteRule ^(.*)â(.*)$ /$1a$2 [R=301,L]
RewriteRule ^(.*)à(.*)$ /$1a$2 [R=301,L]
RewriteRule ^(.*)ï(.*)$ /$1i$2 [R=301,L]
于 2017-03-23T13:52:20.103 回答