我们在网络设置中有两个Wordpress(3.5)博客。我们最近安装了自定义永久链接插件https://wordpress.org/plugins/custom-permalinks/。这一切都在本地(Mac),甚至在其中一个博客的生产。但是对于另一个博客,使用Custom Permalinks插件更改URL slug会给出:“此网页有一个重定向循环”。如果它有任何不同(即使它不应该),博客是阿拉伯语和帖子的URL slugs是阿拉伯语。我试过了:
- 只需访问固定链接管理页面并点击“保存”,它就可以解决一些有类似问题的人
- 试图清除缓存和cookie
- 检查.htaccess
更新
如果这有任何不同,我注意到在我们的生产设置的一个博客上,我得到“太多的重定向”错误,如果我切换到使用英文URL slugs,它的工作原理。这个博客是阿拉伯语,我们正在使用阿拉伯语URL slugs。
我的想法已经用完了,非常感谢任何帮助,谢谢!
答案 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, '/' )
立即为我解决。