Tagged: Apache

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.

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

All in one .htaccess For the wordpress

All in one .htaccess file for the wordpress,

which is utilised for the security restrictions and caching management for the apache webserver.

  • Compressing the static files
  • setting up the cache headers for optimisation
  • Disable Image hotlinking for security
  • Removing directory Browsing fore security

# TN START GZIP COMPRESSION
<IfModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</IfModule>
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE “application/atom+xml” \
“application/javascript” \
“application/json” \
“application/ld+json” \
“application/manifest+json” \
“application/rdf+xml” \
“application/rss+xml” \
“application/schema+json” \
“application/vnd.geo+json” \
“application/vnd.ms-fontobject” \
“application/x-font” \
“application/x-font-opentype” \
“application/x-font-otf” \
“application/x-font-truetype” \
“application/x-font-ttf” \
“application/x-javascript” \
“application/x-web-app-manifest+json” \
“application/xhtml+xml” \
“application/xml” \
“font/eot” \
“font/otf” \
“font/ttf” \
“font/opentype” \
“image/bmp” \
“image/svg+xml” \
“image/vnd.microsoft.icon” \
“image/x-icon” \
“text/cache-manifest” \
“text/css” \
“text/html” \
“text/javascript” \
“text/plain” \
“text/vcard” \
“text/vnd.rim.location.xloc” \
“text/vtt” \
“text/x-component” \
“text/x-cross-domain-policy” \
“text/xml”
</IfModule>
# TN – START EXPIRES CACHING
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/css “access 1 month”
ExpiresByType text/html “access 1 month”
ExpiresByType image/gif “access 1 year”
ExpiresByType image/png “access 1 year”
ExpiresByType image/jpg “access 1 year”
ExpiresByType image/jpeg “access 1 year”
ExpiresByType image/x-icon “access 1 year”
ExpiresByType image/svg+xml “access plus 1 month”
ExpiresByType audio/ogg “access plus 1 year”
ExpiresByType video/mp4 “access plus 1 year”
ExpiresByType video/ogg “access plus 1 year”
ExpiresByType video/webm “access plus 1 year”
ExpiresByType application/atom+xml “access plus 1 hour”
ExpiresByType application/rss+xml “access plus 1 hour”
ExpiresByType application/pdf “access 1 month”
ExpiresByType application/javascript “access 1 month”
ExpiresByType text/x-javascript “access 1 month”
ExpiresByType text/x-component “access plus 1 month”
ExpiresByType application/x-shockwave-flash “access 1 month”
ExpiresByType font/opentype “access plus 1 month”
ExpiresByType application/vnd.ms-fontobject “access plus 1 month”
ExpiresByType application/x-font-ttf “access plus 1 month”
ExpiresByType application/font-woff “access plus 1 month”
ExpiresByType application/font-woff2 “access plus 1 month”
ExpiresDefault “access 1 month”
</IfModule>
# TN – BEGIN Cache-Control Headers
<ifModule mod_headers.c>
<filesMatch “\.(ico|jpe?g|png|gif|swf)$”>
Header set Cache-Control “public”
</filesMatch>
<filesMatch “\.(css)$”>
Header set Cache-Control “public”
</filesMatch>
<filesMatch “\.(js)$”>
Header set Cache-Control “private”
</filesMatch>
<filesMatch “\.(x?html?|php)$”>
Header set Cache-Control “private, must-revalidate”
</filesMatch>
</ifModule>

# TN – DISABLE IMAGE HOTLINKIING START
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?<example.com> [NC] # please replace <example.com> with your domain like abc.com or any
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?google.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ – [NC,F,L]
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2})
RewriteRule ^(.*)$ index.php [F,L]
</IfModule>
# Redirecting to index
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# Deny XMLRPC
<files xmlrpc.php>
order allow,deny
deny from all
</files>

# disable directory browsing
Options All -Indexes
<files wp-config.php>
order allow,deny
deny from all
</files>
# TN – DISABLE IMAGE HOTLINKIING END
<IfModule pagespeed_module>
ModPagespeed on
ModPagespeedEnableFilters rewrite_css,combine_css
ModPagespeedEnableFilters recompress_images
ModPagespeedEnableFilters convert_png_to_jpeg,convert_jpeg_to_webp
ModPagespeedEnableFilters collapse_whitespace,remove_comments
</IfModule>