以连字符结尾的WordPress固定链接将导致404

时间:2018-09-04 作者:Jonathan Stegall

我有一系列URL,其中永久链接以连字符结尾。他们来自之前的CMS,显然这不是问题,但在WordPress中,他们得到了404。

我注意到,当我在CMS中编辑永久链接并删除连字符时,URL开始在末尾使用连字符和不使用连字符,这很好。

但是,既然有600多个这样的URL,那么对这种情况进行批量修复的最佳方法是什么呢?

1 个回复
最合适的回答,由SO网友:bosco 整理而成

您可以使用PHP/和WordPress API编写一个数据库补丁,但由于听起来您不会经常重复这个过程,我认为这可能有点过头了。对于这样的批量更改,最直接的方法是直接在数据库上进行快速SQL更新。

通过SQL查询进行批量更新使用直接SQL查询执行批量更新的一个大例外是,要修改的字段包含序列化数据,在这种情况下,使用PHP/WordPress API或specialized tool 可能会更方便。

幸运的是,post段塞作为普通字符串存储在post_name 字段,因此删除尾部连字符的查询非常直观:

UPDATE wp_posts SET post_name = TRIM(TRAILING "-" FROM post_name) WHERE post_name LIKE "%-"
由于直接SQL查询避免了所有形式的检查和平衡,因此在执行任何数据库更改查询之前,备份数据库是谨慎的。

通过服务器配置进行链接重定向(Link Redirection via Server Configuration)由于此内容似乎已经存在了一段时间,并且您可能有用户试图使用旧的、以连字符结尾的URL访问它,因此您可能需要将重写规则添加到.htaccess 文件(或等效文件),以便将旧URL重定向到新的无连字符对应URL:

# BEGIN WordPress
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteRule ^index\\.php$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)-$ $1 [QSA,R=301,L]  # Redirect requests to hyphen-terminated URLs
  RewriteRule . /index.php [L]
</IfModule>
# END WordPress
这可能需要修改以适应安装的配置。请注意,它将干扰依赖于非文件系统、以连字符结尾的URL(如果存在)的任何其他功能。

结束

相关推荐

Let me choose permalinks

我需要选择一个叫做“mysite”的永久链接。com/1418”,但wordpress不断在永久链接中添加“-2”。通常这意味着我已经有了一个名为“相同”的页面,它位于垃圾箱或其他地方。但这里的情况似乎并非如此。我尝试在设置中重置永久链接,这也没有帮助。我如何使用数字作为页面名称permalink,而不用wordpress在permalink中添加“-2”。