WordPress Custom Permalinks plugin – Redirect Loop

We have two WordPress (3.5) blogs in a network setup. We recently installed the Custom Permalinks plugin, https://wordpress.org/plugins/custom-permalinks/. It all works fine locally (Mac) and even on production for one of the blogs. For the other blog however, changing the URL slug using the Custom Permalinks plugin, gives: “This webpage has a redirect loop”. If it makes any difference (even though it shouldn’t) the blog is in Arabic and the posts’ URL slugs are in Arabic. I have tried:
– Just going to the permalinks admin pages and hitting “Save”, it worked for some people with similar issues.
– Tried to clear cache and cookies.
– Checked .htaccess

UPDATE
If this makes any difference, I noticed that on one of the blogs on our production set up, for which I get the “too many redirects” error, if I switch to using English URL slugs, it works. This blog is in Arabic, and we are using Arabic URL slugs.

Read More

I am running out of ideas, any help would be much appreciated, thanks!

Related posts

Leave a Reply

1 comment

  1. Problem is caused by the custom permalink (edited in post itself) having characters invalid for the plugin logistics (even spaces).

    The plugin registers a hook:
    add_action( 'template_redirect', array( $this, 'make_redirect' ), 5 );
    template_redirect occurs during template load, as provisioned by the plugin’s hook into add_filter( 'request', array( $this, 'parse_request' ) );.

    Due to plugin not supporting encoded url’s, it fails to perform the database query.
    The fix was fairly simple enough.
    Adding urldecode() to the spots required for proper logistics.

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

    solved for me instantly.