0

I have the following 2 redirects active:

/code-examples/(.*)
-> /tutorials/android/$1/

and

/code-examples/android/(.*)
-> /tutorials/android/$1/

The first one has a higher position, so the second will only be executed if the first one didn't apply. This works if there is something in the placeholders, i.e. /code-examples/page1 leads to /tutorials/android/page1.

The problems occur when the placeholders are empty. Just /code-examples or /code-examples/android WITHOUT the trailing slash leads to 404. With the trailing slash, I can see that it adds a second slash at the end, which results in /tutorials/android//.

How can I get the redirects to work properly with and without something in the placeholders?

5
  • Where are these redirects? .htaccess? Oct 25, 2018 at 9:22
  • 2
    Your code can be combined: /code-examples(?:/android|)(?:/?(.*)|\b) And the problem with your REGEX is because it's "requiring" the / (slash) at the end. Btw, this question would have probably been better asked on Stack Overflow.
    – Sally CJ
    Oct 25, 2018 at 9:34
  • Thank you! Will the regex you posted solve my problem? Looks hella complicated Oct 25, 2018 at 21:19
  • And I added the redirects with the Redirection plugin. I am a noob. Oct 25, 2018 at 21:19
  • @FlorianWalther Yes, it will. Check my answer and let me know.
    – Sally CJ
    Oct 26, 2018 at 3:13

1 Answer 1

1
  • The problem with your RegEx patterns:

    /code-examples/(.*)
    /code-examples/android/(.*)
    

    is that they only match when the ending slash (/) is present in the URL; e.g.:

    # Example 1: $1 is 'page1'
    /code-examples/page1
    /code-examples/android/page1
    
    # Example 2: $1 is '' (empty)
    /code-examples/
    /code-examples/android/
    
    # Example 3
    # No matches because the ending / is not present.
    /code-examples
    /code-examples/android
    

    where the "placeholder" (i.e. (.*)) matches the page1 in the first example, and '' (i.e. empty string) in the second example.

  • To make these work:

    /code-examples
    /code-examples/android
    

    you can use (?:/?(.*)|\b) instead of /(.*), like so:

    /code-examples(?:/?(.*)|\b)
    /code-examples/android(?:/?(.*)|\b)
    
  • But since you redirect to the same URL (/tutorials/android/$1/), you can combine those RegEx patterns like so:

    /code-examples(?:/android|)(?:/?(.*)|\b)
    

    where /code-examples(?:/android|) matches either /code-examples or /code-examples/android.

I added the redirects with the Redirection plugin.

I suppose you have something like this on the Tools → Redirection → Redirects page (in wp-admin):

Now with the combined RegEx pattern, delete the second Redirect and edit the first one like so:

Note: For the Type and Group settings, just use your existing setup.

Resources:

1
  • You're welcome, I'm glad it helped you. :)
    – Sally CJ
    Oct 26, 2018 at 18:05

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.