Search code examples
apache.htaccesshttp-redirectmod-rewriteurl-rewriting

Rewrite URLs to redirect and add leading zero


I have a request on the server to this url: in the date part without zero.

http://example.com/url.php?date=2023-1-01

Is there a way to add a zero to the months from 1 to 9 and redirect from htaccess

http://example.com/url.php?date=2023-01-01

Solution

  • You can do something like the following using mod_rewrite near the top of the root .htaccess file.

    For example:

    RewriteEngine On
    
    RewriteCond %{QUERY_STRING} ^(date=\d{4}-)([1-9]-\d\d)$
    RewriteRule ^url\.php$ /$0?%10%2 [R=302,L]
    

    The RewriteCond directive captures the parts of the query string before and after where the 0 needs to be inserted. These parts are stored in the backreferences %1 and %2 which are later used in the substitution string to reconstruct the query string.

    The substitution string (ie. /$0?%10%2) is made up of the following parts:

    • / - Slash prefix required for the external redirect.
    • $0 is a backreference to the URL-path that is matched by the RewriteRule pattern. ie. url.php in this case.
    • ? - delimits the start of the query string
    • %1 - holds the value of the first capturing group (parenthesised subpattern) in the preceding CondPattern. ie. a string of the form date=NNNN-
    • 0 - literal zero.
    • %2 - holds the value of the second capturing group in the preceding CondPattern. ie. a string of the form N-NN.