Looping / Recurring in Apache Mod Rewritting Rule

Mod rewrite , much useful module in apache httpd web server. Although, we utilize it for rewriting the url , redirection, I just want to point out about a special flag which acts like a while loop by which you can achieve looping in mod rewrite rule

So let’s say, you have a requirement that you want to replace some character or want to process mod rewrite rule , just like a do while loop, but you do not have any control over, how many times it can appear in url.

Example:-

https://example.com/test_underscore_replace_by_hyphen

So you want to replace each of the underscore by hyphen.

https://example.com/test-underscore-replace-by-hyphen

This is achieved by N [Next] flag in rewrite condition.

RewriteEngine on
RewriteRule ^(.+)_(.+)$ $1-$2 [N] 

question:-  How to control, then number of loop iteration ?

RewriteEngine on
RewriteRule ^(.+)_(.+)$ $1-$2 [N=10] 
#It means , iteration will be 10 times.

Imp-1 :- If you do not specify default looping is 32000 .

Imp-2 :- Controlling iteration in directory path as well.

Let’s say url is https://example.com/dir_1/dir_2/test_underscore_replace_by_hyphen

if you test this url against the above rule, it will not produce the desired result.
if you check error log , you will find the
add path info postfix” line.

it means , mod_rewrite will iterate over request uri and search and it will add the path next to it. this will create a url that will not be valid.

Coming to point,
Add DPI [discardpath] flag

RewriteEngine on
RewriteRule ^(.+)_(.+)$ $1-$2 [N,DPI] 
#It means , iteration will be 10 times.

result will be 

https://example.com/dir-1/dir-2/test-underscore-replace-by-hyphen

Leave a Reply

Your email address will not be published. Required fields are marked *