Wordpress自定义永久链接插件 - 重定向循环

时间:2015-02-01 14:04:30

标签: wordpress arabic permalinks

我们在网络设置中有两个Wordpress(3.5)博客。我们最近安装了自定义永久链接插件https://wordpress.org/plugins/custom-permalinks/。这一切都在本地(Mac),甚至在其中一个博客的生产。但是对于另一个博客,使用Custom Permalinks插件更改URL slug会给出:“此网页有一个重定向循环”。如果它有任何不同(即使它不应该),博客是阿拉伯语和帖子的URL slugs是阿拉伯语。我试过了:
- 只需访问固定链接管理页面并点击“保存”,它就可以解决一些有类似问题的人 - 试图清除缓存和cookie - 检查.htaccess

更新
如果这有任何不同,我注意到在我们的生产设置的一个博客上,我得到“太多的重定向”错误,如果我切换到使用英文URL slugs,它的工作原理。这个博客是阿拉伯语,我们正在使用阿拉伯语URL slugs。

我的想法已经用完了,非常感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

问题是由于自定义永久链接(在帖子本身中编辑)具有对插件物流无效的字符(甚至是空格)引起的。

插件注册了一个钩子: add_action( 'template_redirect', array( $this, 'make_redirect' ), 5 ); template_redirect 发生在模板加载期间,由插件的钩子提供到 add_filter( 'request', array( $this, 'parse_request' ) );

由于插件不支持编码的url,所以无法执行数据库查询。
修复相当简单。
urldecode() 添加到适当物流所需的位置。

/frontend/class-custom-permalinks-frontend.php
第 167 行变为:
$request_no_slash = preg_replace( '@/+@','/', urldecode(trim( $request, '/' ) ));
第 369 行变为:
$request_no_slash = urldecode($request_no_slash);
第 432 行变为:
substr( urldecode($request), 0, strlen( $custom_permalink ) ) != $custom_permalink
第 440 行变为:
if ( substr( urldecode($request), 0, strlen( $original_permalink ) ) == $original_permalink
第 441 行变为:
&& trim( urldecode($request), '/' ) != trim( $original_permalink, '/' )

立即为我解决。