使用htaccess重写Wordpress url别名的特殊字符

时间:2012-08-03 15:28:38

标签: wordpress .htaccess drupal redirect special-characters

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

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

  • /故事/将-这待另一-拉尼娜年

Wordpress中的网址返回404.但是,这有效:

  • /故事/将-这待另一-拉尼娜年

似乎我最好的办法是在将网址传递给Wordpress之前,在htaccess中为英文字符集重写规则写一个通用的国际字符。

知道我怎么做这个吗? 非常感谢您提供的任何帮助。 太

2 个答案:

答案 0 :(得分:0)

似乎在wordpress中可能有更好的方法来执行此操作,您可能希望快速浏览wordpress Trac tickets,可能会有一些补丁或临时修复此问题。但是,如果您需要转到htaccess / redirect方法,则可以使用RewriteMap进行清理并重定向(如果需要)或显式重定向非ascii字符。

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

文字映射:

http://

脚本映射:

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

然后在你的htaccess文件中,你可以像这样调用这个映射(这些规则需要在上面 wordpress规则,因为你希望在 wordpress之前清理URI 抓住他们。

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

如果您无法访问server / vhost配置,则必须枚举htaccess文件中的可能性,再次将这些规则置于wordpress规则之上:

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

答案 1 :(得分: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]