
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/">
    <channel>
        <title><![CDATA[ The Cloudflare Blog ]]></title>
        <description><![CDATA[ Get the latest news on how products at Cloudflare are built, technologies used, and join the teams helping to build a better Internet. ]]></description>
        <link>https://blog.cloudflare.com</link>
        <atom:link href="https://blog.cloudflare.com/" rel="self" type="application/rss+xml"/>
        <language>en-us</language>
        <image>
            <url>https://blog.cloudflare.com/favicon.png</url>
            <title>The Cloudflare Blog</title>
            <link>https://blog.cloudflare.com</link>
        </image>
        <lastBuildDate>Wed, 15 Apr 2026 01:18:06 GMT</lastBuildDate>
        <item>
            <title><![CDATA[Managed Transforms: templated HTTP header modifications]]></title>
            <link>https://blog.cloudflare.com/managed-transforms-templated-http-header-modifications/</link>
            <pubDate>Thu, 30 Jun 2022 12:55:19 GMT</pubDate>
            <description><![CDATA[ Customize multiple HTTP headers with a single click using Cloudflare Managed Transforms ]]></description>
            <content:encoded><![CDATA[ 
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/ndVg7s51Dv7zOnnNhAKd0/3f6f5c93e8985562fdba352c73325d0b/image5-19.png" />
            
            </figure><p><b>Managed Transforms</b> is the next step on a journey to make HTTP header modification a trivial task for our customers. In early 2021 the only way for Cloudflare customers to modify HTTP headers was by writing a <a href="https://workers.cloudflare.com/">Cloudflare Worker</a>. We heard from numerous customers who wanted a simpler way.</p><p>In <a href="/transform-http-request-headers/">June 2021</a> we introduced Transform Rules, giving customers a simple UI letting them specify what the custom HTTP header’s name and value is—either a static string (i.e. <code>X-My-CDN: Cloudflare</code>) or a dynamically populated value (i.e. <code>X-Bot-Score: cf.bot_management.score</code>).</p><p>This made the job much simpler, however there is still a good amount of thought required—with a number of potential drop-off points on the user journey. For example, in order to dynamically populate the bot score into the value of an HTTP request header, the user needs to know the correct <a href="https://developers.cloudflare.com/ruleset-engine/rules-language/fields">field name</a>. To find that they'll need to go to the documentation site, find the correct section, etc.</p><p>When we analyzed how our customers use Transform Rules we found a set of very common use cases in the data. Four of the top eight fields used were relating to bot management; customers wanting to have the bot score, JA3 hash, etc. of each request added as an HTTP header. A further three of the top 10 fields were relating to the geographic location of the visitor (their city, country and ASN). We also saw over 400 Transform Rules being used just to remove <code>X-Powered-By</code>. That means potentially 400 users went to the same part of the dashboard, typed the same header name, read the same documentation and selected the same action.</p><p>Much as we set out to productize the common Cloudflare Worker use case of HTTP header modification into Transform Rules, we have now set out to productize and further simplify the common Transform Rules use cases into Managed Transforms.</p><p>The intention is to continue to identify common reasons for use of a Transform Rule and where possible package them up into a single click solution.</p><p>We always want to make our user’s lives as easy as possible, and finding a way to stop hundreds of people typing the same thing and clicking the same buttons, to achieve the exact same outcome, seems a great way to continue that mission.</p>
    <div>
      <h3>An even simpler solution</h3>
      <a href="#an-even-simpler-solution">
        
      </a>
    </div>
    <p><b>Managed Transforms</b> is a dedicated section of Transform Rules offering one-click HTTP header modifications. Want to add relevant Cloudflare <a href="https://www.cloudflare.com/products/bot-management/">Bot Management</a> information as custom HTTP headers? One click. Want to add geographic information (country, etc.) as custom HTTP headers? One click.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5G4giWNwJPxzcxp53QQzap/920a04eb6c82f1c66d7ab87678093c42/image4-28.png" />
            
            </figure><p>Managed Transforms can be found in 'Rules &gt; Transform Rules' and clicking on the 'Managed Transforms' button. To benefit from Managed Transforms, users simply toggle the appropriate settings, and we take care of the rest.</p><p>For example, to enrich every HTTP request with Cloudflare’s <a href="https://www.cloudflare.com/products/bot-management/">Bot Management</a> information users would enable ‘Add bot protection headers’. This setting ensures we add <a href="https://developers.cloudflare.com/rules/transform/managed-transforms/reference/">four new HTTP request headers</a> to <i>every</i> HTTP request. SIEM (Security Information and Event Management) products can then be configured to correctly collect and chart these new headers, allowing customers to see the bot score of every HTTP request, how many requests are coming from verified bots, and so on.</p><p>Another great use case is the ‘Add security headers’ toggle. On a completely standard, default zone, a user can improve their website's <a href="https://securityheaders.com/">security score</a> from an F to a C in <b>just one click</b>. Enabling HSTS improves the score to a B (<i>scores correct as of June 7, 2022</i>).</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5HpdOezo4M1j4KVd0gZ8Co/2eabf00940841a2aa4f6821a66df771e/image3-35.png" />
            
            </figure><p>Adding a Content-Security-Policy (used to <a href="https://www.cloudflare.com/learning/security/how-to-prevent-xss-attacks/">mitigate Cross-Site Scripting (‘XSS’) attacks</a>) or a Permission-Policy (used to give websites the ability to allow or block the use of browser features) increases the score to an ‘A’; the addition of both improves the score to the maximum: A+.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3M5FV3sWJnaHx2ScPkPLGW/7676a7a95929413e4d52e01361010fd0/image1-58.png" />
            
            </figure><p>During the design of Managed Transforms we chose not to include default Content-Security-Policy and Permission-Policy HTTP response headers within the ‘Add security headers’ toggle as we found these particular headers to be very specific to each individual website. Any default policies we tried either caused incorrect loading of the website content, or were too open to be of any value. So we decided to remove them from scope.</p><p>However, users can still add these HTTP response headers and their appropriate values in a handful of clicks by creating a new Transform Rule:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/zORZ4ooIorzZopWSuOBWk/2b26e8e37498603141138fd07cdadfbd/image2-50.png" />
            
            </figure><p>The HTTP response headers entered here will be added alongside the HTTP response headers added by Managed Transforms to give an A+ score.</p>
    <div>
      <h3>Try it now</h3>
      <a href="#try-it-now">
        
      </a>
    </div>
    <p>Managed Transforms can be used to improve operations, remove sensitive data, and increase security, amongst other common use cases.</p><p>Try out <a href="https://dash.cloudflare.com/?to=/:account/:zone/rules/transform-rules">Managed Transforms</a> yourself today.</p><p>...<i>We protect </i><a href="https://www.cloudflare.com/network-services/"><i>entire corporate networks</i></a><i>, help customers build </i><a href="https://workers.cloudflare.com/"><i>Internet-scale applications efficiently</i></a><i>, accelerate any </i><a href="https://www.cloudflare.com/performance/accelerate-internet-applications/"><i>website or Internet application</i></a><i>, ward off </i><a href="https://www.cloudflare.com/ddos/"><i>DDoS attacks</i></a><i>, keep </i><a href="https://www.cloudflare.com/application-security/"><i>hackers at bay</i></a><i>, and can help you on </i><a href="https://www.cloudflare.com/products/zero-trust/"><i>your journey to Zero Trust</i></a><i>.</i></p><p><i>Visit </i><a href="https://1.1.1.1/"><i>1.1.1.1</i></a><i> from any device to get started with our free app that makes your Internet faster and safer.To learn more about our mission to help build a better Internet, start </i><a href="https://www.cloudflare.com/learning/what-is-cloudflare/"><i>here</i></a><i>. If you’re looking for a new career direction, check out </i><a href="http://cloudflare.com/careers"><i>our open positions</i></a><i>.</i></p> ]]></content:encoded>
            <category><![CDATA[Transform Rules]]></category>
            <guid isPermaLink="false">6YEMr7635QkaWejfbVFZsT</guid>
            <dc:creator>Sam Marsh</dc:creator>
        </item>
        <item>
            <title><![CDATA[Modifying HTTP response headers with Transform Rules]]></title>
            <link>https://blog.cloudflare.com/transform-http-response-headers/</link>
            <pubDate>Thu, 18 Nov 2021 14:00:02 GMT</pubDate>
            <description><![CDATA[ HTTP response headers can now be modified with Cloudflare Transform Rules. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>HTTP headers are central to how the web works. They are used for passing additional information between the client and server, such as which security permissions to apply and information about the client, allowing the correct content to be served.</p><p>Today we are announcing the immediate availability of the third action within Transform Rules, “HTTP Response Header Modification”, available for all Cloudflare plans. This new functionality provides Cloudflare users the ability to set or remove HTTP response headers as traffic returns through Cloudflare back to the client. This allows customers to enrich responses with information about how their request was handled, debugging information and even <a href="https://frenxi.com/http-headers-you-dont-expect/">recruitment messages</a>.</p><p>Previously, HTTP response header modification was done using a <a href="https://workers.cloudflare.com/">Cloudflare Worker</a>. Today we’re introducing an easier way to do this without writing a single line of code.</p>
    <div>
      <h3>Luggage tags of the World Wide Web</h3>
      <a href="#luggage-tags-of-the-world-wide-web">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/12mADL32rqDAMHBIglhf3u/4c7f369ab4ffc00390d455f672332a9b/image4-14.png" />
            
            </figure><p>Think of HTTP headers as the “luggage tag” attached to your bags when you check in at the airport.</p><p>Generally, you don't need to know what those numbers and words mean. You just know they are important in getting your suitcase from the boarding desk, to the correct airplane, and back to the correct luggage carousel at your destination.</p><p>These tags contain information about the weight of the suitcase, the destination airport code, baggage tag number, airline carrier, customs handling information, and more. These attributes are all essential, not only for ensuring that your luggage arrives at the correct destination, but also it does so in the safest, most efficient manner.</p><p>HTTP headers are the luggage tags of the Internet. They are essential to ensuring the request from your browser arrives at the correct destination, and that traffic is returned to your browser using the correct settings also in the safest, most efficient manner.</p>
    <div>
      <h3>How are HTTP response headers used?</h3>
      <a href="#how-are-http-response-headers-used">
        
      </a>
    </div>
    <p>HTTP headers are set on both the ‘request’ and ‘response’ interactions; ‘request’ being when the client asks for the file and ‘response’ being what the server returns as a result. The functionality announced today pertains specifically to HTTP <i>response</i> headers.</p><p>HTTP response headers are used to ensure the correct data is returned to the browser along with information which helps the browser handle the data correctly. Common response headers include “Content-Type” which tells the browser the type of the content returned, e.g. “Content-Type: text/html” or “Content-Type: image/png”. Another common header is “Server:” which contains information about the software used to handle the HTTP request, e.g. “Server: cloudflare”.</p><p>Outside of basic HTTP traffic handling there are many other uses for these response headers. One such example is to improve <i>security</i>. Security mechanisms such as Content Security Policy (CSP), Cross Origin Resource Sharing (CORS) and HTTP Strict Transport Security (HSTS) are all implemented as response headers to improve and harden security for website visitors.</p><p>For example, the primary goal of CSP is to <a href="https://www.cloudflare.com/learning/security/how-to-prevent-xss-attacks/">mitigate and report Cross-Site Scripting (XSS) attacks</a>. XSS attacks occur when a malicious script is injected into a trusted website, allowing an attacker to use an application to send malicious code such as a browser-side script to a different end user. This script can then be used to compromise the end user’s interactions with the website or application, siphoning sensitive information such as passwords to a third party.</p><p>To prevent this, CSP is added by the website administrator as a HTTP response header. The CSP response header specifies the domains that the browser should consider to be valid sources of executable scripts. A <a href="https://content-security-policy.com/">CSP compatible browser</a> will then only execute scripts loaded in files received from those permitted domains, ignoring all other scripts.</p><p>CSP is added to the HTTP response by setting the ‘Content-Security-Policy’ header along with the policy which is contained in the value. For example, when using NGINX, a <a href="https://w3techs.com/technologies/overview/web_server">popular</a> web server, the administrator would have a line in the config similar to:</p>
            <pre><code>add_header Content-Security-Policy "default-src 'self';" always;</code></pre>
            <p>When using <a href="https://workers.cloudflare.com/">Cloudflare Workers</a>, the code would be similar to:</p>
            <pre><code>response.headers.set("Content-Security-Policy": "default-src 'self' example.com *.example.com",)</code></pre>
            <p>When the browser receives the HTTP response it will now detect the presence of the Content-Security-Policy header and act appropriately.</p>
    <div>
      <h2>Dynamic modification of HTTP response headers</h2>
      <a href="#dynamic-modification-of-http-response-headers">
        
      </a>
    </div>
    <p>Ensuring these headers are present on the HTTP response is often the job of the reverse proxy — a server which sits between the client and the server whose job is, amongst many others, to enrich the HTTP response data returned to the client.</p><p>“HTTP Response Header Modification” is now available for all Cloudflare plans, within Transform Rules. It provides the ability to modify HTTP response headers before they are returned to the visitor, all within Cloudflare. This is especially important when the response is coming from an origin the administrator does not have total control over, such as a SaaS provider or other third party service.</p><p>![](<a href="/content/images/2021/11/image7-8.png_REGULAR">http://staging.blog.mrk.cfdata.org/content/images/2021/11/image7-8.png_REGULAR</a> "Screenshot of "Transform Rules"")</p><p>Transform Rules allows users to modify up to ten HTTP response headers per rule using one of three options:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/28zIXSp655L8kcqJTB5beQ/dd5b8e529123ab1facc2f0c18779936f/image5-8.png" />
            
            </figure><p>‘Set dynamic’ should be used when the value of a HTTP response header needs to be populated dynamically for each HTTP response. Examples include adding the Cloudflare Bot Management ‘bot score’ to each HTTP response, or the visitor’s country:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3pCHrt1SktfeuMFoUBA9yL/2cfe53ce00d331cbda4b4a1627df3699/image3-26.png" />
            
            </figure><p><b>Note</b>: These values are calculated using the corresponding HTTP request, meaning the bot score returned in the response header will be calculated based upon the HTTP request. Similarly, the ‘ip.src.country value will be the country of the website visitor, not the origin where the response was sent from.</p><p>‘Set static’ should be used to populate the value of a header with a static, literal string. This option should be used for simple header creation such as setting the CORS or CSP policies:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7nEUjorNMt9crmydMSdRbk/75563e9f0c0844003bc1a1b15be70441/image1-46.png" />
            
            </figure><p>In both ‘set’ examples, if a header with the specified name already exists in the HTTP response, its value will be removed and replaced with the given value.</p><p>‘Remove’ is the final option, which should be used to remove all HTTP response headers with the specified name. For example, if you wanted to ensure the ‘Link’ HTTP response header was removed, you would use a rule similar to the following one:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/76oRwPpelCvA5iVFoiL0AL/aec056fa3e8a6467f139b6c2e74221fc/image6-10.png" />
            
            </figure><p>Cloudflare <a href="https://developers.cloudflare.com/firewall/cf-firewall-language/functions">functions</a> can be used within ‘set dynamic’ header modifications. These functions include:</p><ul><li><p>concat()</p></li><li><p>regex_replace()</p></li><li><p>to_string()</p></li><li><p>lower()</p></li></ul><p>An example where functions are commonly used is concat() and to_string() used to take a list of different data types and concatenate to form a single header value. For example, <b>`concat(“score=”,to_string(cf.bot_management.score))</b>` would result in a header value like `score=85`.</p><p><b>Note</b>: regular expression functions are only available for customers on Business and Enterprise plans.</p>
    <div>
      <h2>Optimizing for your website</h2>
      <a href="#optimizing-for-your-website">
        
      </a>
    </div>
    <p>One other huge benefit of moving HTTP response header modification into Cloudflare is the level of filtering provided in the rule builder. Typically, technologies like CORS and CSP are set as response headers on the entire website — or at best — on a per-directory basis.</p><p>With Transform Rules, administrators can set headers based upon a number of parameters including the visitor's country of origin, bot score, user agent, requested filename / file extension, request method and <a href="https://developers.cloudflare.com/firewall/cf-firewall-language/fields">more</a>.</p><p>This allows administrators the ability to implement setups such as having a stricter Content Security Policy for <a href="https://developers.cloudflare.com/bots/get-started/bm-subscription#verified-bots">verified</a> bots vs unverified bots/low bot score traffic.</p>
    <div>
      <h2>Try it now</h2>
      <a href="#try-it-now">
        
      </a>
    </div>
    <p>HTTP Response Header Modification can be used to improve operations, remove sensitive data, and increase security, amongst many other use cases. Try out the latest <a href="https://dash.cloudflare.com/">Transform Rule</a> yourself today.</p>
    <div>
      <h3>Watch on Cloudflare TV</h3>
      <a href="#watch-on-cloudflare-tv">
        
      </a>
    </div>
    <div></div>
<p></p>
<div></div><p></p> ]]></content:encoded>
            <category><![CDATA[Full Stack Week]]></category>
            <category><![CDATA[Transform Rules]]></category>
            <guid isPermaLink="false">3ZL0uOBEsMjj6XZolsop5g</guid>
            <dc:creator>Sam Marsh</dc:creator>
        </item>
        <item>
            <title><![CDATA[Transform Rules:"Requests, Transform and Roll Out!"]]></title>
            <link>https://blog.cloudflare.com/transform-rules-requests-transform-and-roll-out/</link>
            <pubDate>Wed, 07 Jul 2021 12:59:42 GMT</pubDate>
            <description><![CDATA[ Perform URL Normalization, URL Rewriting, or Header Modification without having to write a line of code! ]]></description>
            <content:encoded><![CDATA[ 
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3ms6u2WZoqyNjSMtDSszcO/af4c392d74ed61ee0c2b806e9a6e89dc/image10-2.png" />
            
            </figure><p>Applications expect specific inputs in order to perform optimally. Techniques used to shape inputs to meet an application's requirements might include <a href="https://developers.cloudflare.com/rules/normalization">normalizing the URLs</a> to conform to a consistent formatting standard, <a href="/introducing-transform-rules-with-url-rewriting-at-the-edge/">rewriting the URL’s</a> path and query based on different conditions and logic, and/or <a href="/transform-http-request-headers/">modifying headers</a> to indicate an application’s specific information. These are expensive to run and complex to manage. Cloudflare can help you to offload the heavy lifting of modifying requests for your servers with Transform Rules. In this blog we will cover the nuts and bolts of the functionality.</p><p>Origin server? : <i>Thank you so much for offloading that for me, Cloudflare</i></p><p>Cloudflare edge servers? : <i>No problem, buddy, I have taken care of that for you</i></p>
    <div>
      <h2>Why do people need Transform Rules?</h2>
      <a href="#why-do-people-need-transform-rules">
        
      </a>
    </div>
    <p>When it comes to modifying an HTTP/HTTPS request with normalization, rewriting the URLs, and/or modifying headers, Cloudflare users often use <a href="https://developers.cloudflare.com/workers/">Cloudflare Workers</a>, code they craft that runs on Cloudflare’s edge.</p><p>Cloudflare Workers open the door to many possibilities regarding the amount of work that can be done for your applications, close to where your end users are located. It provides a serverless execution environment that allows you to create application functionality without configuring or maintaining infrastructure. However, using a Worker to modify the request is kind of like wearing a diving suit in a kiddie pool. Therefore, a simple tool to modify requests without Workers has long been wanted.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/62P8ovhPVq9mJuMFjJcVSD/e8949a7092f6a362e32b51b5eb2b9e12/image13.png" />
            
            </figure><p>It’s in this context that we looked at the most common request modifications that customers were making, and built out Transform Rules to cover them. Once Transform Rules were announced we anticipated they’d become the favourite tool in our customers’ tool box.</p>
    <div>
      <h2>What do Transform Rules do?</h2>
      <a href="#what-do-transform-rules-do">
        
      </a>
    </div>
    <ul><li><p><b>URL Normalization:</b> normalizes HTTP requests to a standard format which then allows you to predictably write security rule filters.</p></li><li><p><b>URL Rewrite:</b> static and dynamic rewrites of the URL’s path and/or query string based on various attributes of the request.</p></li><li><p><b>Header Modify:</b> add or remove static or dynamic headers (based on Cloudflare specific attributes) to requests based on different various attributes of the request.</p></li></ul>
    <div>
      <h3>URL Normalization</h3>
      <a href="#url-normalization">
        
      </a>
    </div>
    <p>Bad actors on the Internet often encode your URLs to attack your applications because encoded URLs can bypass some security rules. URL Normalization transforms the request URL from encoded to unencoded before Cloudflare’s security features, so no one can bypass the firewall rules you configure.</p><p>For example, say you had a rate limiting rule for the path "<code>/login</code>" but someone sent the request as “<code>/%6cogin</code>”. Illustrated below:</p><p>You?: <i>Rate Limiting for </i><code><i>https://www.example.com/login</i></code><i> to avoid </i><a href="https://www.cloudflare.com/learning/bots/brute-force-attack/"><i>brute force attacks</i></a><i>.</i></p><p>Attacker?: <i>You think you can stop me? I will issue massive requests to </i><code><i>https://www.example.com/%6cogin</i></code><i> to bypass your rate limiting rule.</i></p><p>Without URL Normalization, the request would bypass the rate limiting rule, but with URL Normalization the request is converted from the URL path <code>/%6cogin</code> to <code>/login</code> before the rule is applied.</p><p>By default, URL Normalization is enabled for all the zones on Cloudflare at Cloudflare’s edge, and disabled when going to origins. This means incoming URLs will be decoded to standard format before any Cloudflare security execution. When going back to the origins, we will use the original URL. In this way, no encoded URL can bypass security features and the origin also can see the original URL.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1f33EIaG1UvCcCBNaLWwpi/d16c1eb4e8d125a5227d1180ebc7e7d0/image3-2.png" />
            
            </figure>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/zUZWJPDIgV6U7KIw69BSE/d0cbfe19cfe045a96617b4a5c674c583/image1-5.png" />
            
            </figure><p>The default settings are flexible to adjust if you need. <a href="https://community.cloudflare.com/t/faq-url-normalization/259183">This FAQ page</a> has more information about URL Normalization.</p>
    <div>
      <h3>URL Rewrite</h3>
      <a href="#url-rewrite">
        
      </a>
    </div>
    <p>When talking about URL Rewrites, we always want to distinguish them from URL Redirects. They are like twins. Rewrites is a server-side modification of the URL before it is fully processed by the web server. This will not change what is seen in the user’s browser. Redirects forward URLs to other locations via a 301 or 302 HTTP status code. This will change what is seen in the user’s browser. You can do a URL Redirect with "Forwarding URL" in <a href="https://support.cloudflare.com/hc/en-us/articles/218411427">Cloudflare Pages Rules</a>. Page Rules trigger actions whenever a request matches one of the URL patterns you define_._</p><p>Transform Rules come into play when we need to use URL Rewrite. This allows you to rewrite a URL’s path and/or query string based on the logic of your applications. The rewrite can be a fixed string (which we call ‘static’) or a computed string (called ‘dynamic’) based on various attributes of a request, like the country it came from, the referrer, or parts of the path. These rewrites come before products such as Firewall Rules, Page Rules, and Cloudflare Workers.</p>
    <div>
      <h3>Static URL Rewrite Example</h3>
      <a href="#static-url-rewrite-example">
        
      </a>
    </div>
    <p>When visiting <code>www.example.com</code> with a cookie of <code>version=v1</code>, you want to rewrite the URL to <code>www.example.com/v1</code> when going to the origin server. In this case, the end-user facing URL will not change, but the content will be the /v1’s content. This is a static URL rewrite. It only does rewrites when end users visit the URL <code>www.example.com</code> with cookie <code>version=v1</code><i>.</i> It can help you to do A/B testing when rolling out new content.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6xbvwaBlCv7apqIU45AdTU/1f8ea0e9d0e76537f04feefea6d5966f/image9-1.png" />
            
            </figure>
    <div>
      <h3>Dynamic URL Rewrite Example</h3>
      <a href="#dynamic-url-rewrite-example">
        
      </a>
    </div>
    <p>When visiting any URL of <code>www.example.com</code> with a cookie of <code>version=v1</code>, you want to rewrite the request by adding <code>/v1/</code> to the beginning of the URL for v1 content, when going to the origin server.</p><p>In this use case, when end users visit <code>www.example.com/Literaturelibrary/book1314</code> with cookie <code>version=v1</code>, Cloudflare will rewrite the URL to <code>www.example.com/v1/Literaturelibrary/book1314</code>.</p><p>When end users visit <code>www.example.com/fictionlibrary/book52/line43/universe</code> with cookie <code>version=v1</code>, Cloudflare will rewrite the URL to <code>www.example.com/v1/fictionlibrary/book52/line43/universe</code>.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5VX3SJrAzXtXQDx9r99Ol7/7994f0b6e4c43148a2567b4c8c165edb/image2-3.png" />
            
            </figure><p>In this case, the URL visible in the client’s browser will not change, but the content returned will be from the <code>/v1</code> location. This is a dynamic URL rewrite, so it applies the rewrite to all URLs when end users visit with the cookie.</p>
    <div>
      <h3>Another Dynamic URL Rewrite Example</h3>
      <a href="#another-dynamic-url-rewrite-example">
        
      </a>
    </div>
    <p>When visiting any URL of <code>www.example.com</code> with a cookie of <code>version=v1</code> and query string of <code>page=1</code> that has <code>/global</code> in the beginning of the URL, this rule rewrites the request by replacing <code>/global</code> in the beginning for the URL with <code>/v1</code> and updates the query string to <code>newpage=1</code>, when going to the origin server.</p><p>When end users visit <code>www.example.com/global/Literaturelibarary/book1013?page=1</code> with cookie of <code>version=v1</code><b>,</b> Cloudflare will rewrite the URL to <code>www.example.com/v1/Literaturelibarary/book1013?newpage=1</code>.</p><p>And when end users visit <code>www.example.com/global/fictionlibarary/book52/line43/universe?page=1</code> with cookie of <code>version=v1</code><b>,</b> Cloudflare will rewrite the URL to <code>www.example.com/v1/fictionlibarary/book52/line43/universe?newpage=1</code>.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5z21p3m7Bt3vAcqRMXuAHc/6730cd6d20ffd8904b89d55f741febc0/image6-3.png" />
            
            </figure><p>In this case, the end-user facing URLs will not change, but the content will be v1’s content. This is a dynamic URL rewrite, so it applies the rewrite to all URLs when end users visit with the cookie of <code>version=v1</code> and a query string of <code>page=1</code>.</p>
    <div>
      <h3>Header Modify</h3>
      <a href="#header-modify">
        
      </a>
    </div>
    <p>Adding/removing request headers of the requests when going to origin servers. This is one of the most requested features of customers using Cloudflare Workers, especially those sending the Bot Score as a request header to origin. <a href="/transform-http-request-headers/">You can use this feature</a> to add/remove strings and non-strings, and static or dynamic request header values.</p><p><b>Set Static header:</b> Adds a static header and value to the request and sends it to the origin.</p><p>For example, add a request header such as <code>foo: bar</code> only when the requests have the hostname of <code>www.example.com</code>.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1u2KfCcl08HmV4vGuMp6Tq/25cb7038fb5bac3b804d905f70addeb9/pasted-image-0.png" />
            
            </figure><p>With the above setting, Cloudflare appends a static header Foo: bar to your origin when this rule triggers. Here is what the origin should see.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3GP9tyY2bKuneIOCqvrox7/daed985ba5d99ef49ade7e636932f933/image8-1.png" />
            
            </figure><p><b>Set Dynamic header :</b> Adds a dynamic header value from the computed field, like the end user’s geolocation.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/zfVWPAG1OBr2jyHmPxpQi/f475e986ca8675e038b790bfd572970a/image7-1.png" />
            
            </figure><p>The dynamic request headers are added.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5ZT19vARgXTzSCAnzmpSG9/728bd7100c2c7f2f419c0afca9048f80/image5-4.png" />
            
            </figure><p><b>Set Dynamic Bot Management headers:</b> Cloudflare Bot Management protects applications from bad bot traffic by scoring each request with a “bot score” from 1 to 99. With Bot Management enabled, we can send the bot score to the origin server as a request header via Transform Rules.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2fAWqLlHhQnTbvhbhLkHR8/02dbfda7d1688295a600bbf58570eba3/image4-2.png" />
            
            </figure><p>The bot score header is added.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2RVr7yI1GAKQLRX0h2YBR6/36defb26432dd7fc9f3b463ceac6d74e/image12.png" />
            
            </figure>
    <div>
      <h2>It has never been easier</h2>
      <a href="#it-has-never-been-easier">
        
      </a>
    </div>
    <p>With Transform Rules, you can modify the request with URL Normalization, URL Rewrites, and HTTP Header Modification with easy settings to power your application. There’s no script required for Cloudflare to offload those duties from your origin servers. Just like Optimus Prime says “Autobots, transform and roll out!", Cloudflare says “Requests, transform and roll out!”.</p><p>Try out the latest <a href="https://dash.cloudflare.com/">Transform Rules</a> yourself today.</p> ]]></content:encoded>
            <category><![CDATA[Transform Rules]]></category>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[Edge Rules]]></category>
            <guid isPermaLink="false">3vVQWmA3jPNtZKtu9VcOq8</guid>
            <dc:creator>Ming Xue</dc:creator>
        </item>
        <item>
            <title><![CDATA[Modify HTTP request headers with Transform Rules]]></title>
            <link>https://blog.cloudflare.com/transform-http-request-headers/</link>
            <pubDate>Tue, 08 Jun 2021 13:12:50 GMT</pubDate>
            <description><![CDATA[ HTTP request headers can now be modified with Cloudflare Transform Rules. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>HTTP headers are central to how the web works. They are used for passing additional information between the client and server, such as which security permissions to apply and information about the client, allowing the correct content to be served.</p><p>Today we are announcing the immediate availability of the second action within Transform Rules, “<b>HTTP Request Header Modification</b>”, available for all Cloudflare plans. This new functionality provides Cloudflare administrators with the ability to easily set or remove HTTP request headers as traffic flows through Cloudflare. This allows customers to enrich requests with information such as the <a href="https://www.cloudflare.com/products/bot-management/">Cloudflare Bot Management</a> ‘<b>Bot Score</b>’ prior to being sent to their servers. Previously, HTTP request header modification was done using a <a href="https://workers.cloudflare.com/">Cloudflare Worker</a>. Today we’re introducing an easier way to do this without writing a single line of code.</p>
    <div>
      <h3>Luggage tags of the World Wide Web</h3>
      <a href="#luggage-tags-of-the-world-wide-web">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5weknAkW93x2spAcDSstwZ/75245c756aeb06e38831de9a4c6e119a/markus-spiske-pMxKbn5ucZs-unsplash.jpeg.jpeg" />
            
            </figure><p>Photo by <a href="https://unsplash.com/@markusspiske?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Markus Spiske</a> on <a href="https://unsplash.com/?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></p><p>Think of HTTP headers as the “luggage tag” attached to your bags when you check in at the airport.</p><p>Generally, you don't need to know what those numbers and words mean. You just know they are important in getting your suitcase from the boarding desk, to the correct airplane, and back to the correct luggage carousel at your destination.</p><p>These tags contain information about the weight of the suitcase, the destination airport code, baggage tag number, airline carrier, customs handling information, and more. These attributes are all essential, not only for ensuring that your luggage arrives at the correct destination, but also it does so in the safest, most efficient manner.</p><p>HTTP Headers are the luggage tags of the Internet. They are essential to ensuring the request from your browser arrives at the correct destination, and that traffic is returned to your browser using the correct settings also in the safest, most efficient manner.</p>
    <div>
      <h3>How are HTTP request headers used?</h3>
      <a href="#how-are-http-request-headers-used">
        
      </a>
    </div>
    <p>HTTP headers are set on both the ‘request’ and ‘response’ interactions; ‘request’ being when the client asks for the file and ‘response’ being what the server returns as a result. The functionality announced today pertains specifically to HTTP <i>request headers</i> only.</p><p>Many organizations use HTTP request headers to ensure visitor requests are served correctly. They are used to route requests to different clusters, serve mobile-friendly content, and legacy-browser friendly content.</p><p>HTTP request headers are also used for security purposes, namely authentication and authorization. Simple examples include adding a static, pre-shared key as a custom header which adds an additional security check to all inbound HTTP requests.</p><p>Ensuring these headers are present on the HTTP request is often the job of the reverse proxy — a server which sits between the client and the server whose job is, amongst many others, to enrich the HTTP request data sent to the server.</p><p>For example, when using NGINX, a <a href="https://w3techs.com/technologies/overview/web_server">popular</a> web server used as a reverse proxy, the administrator would have a line in the config similar to:</p>
            <pre><code>proxy_set_header X-Header-Name "custom";</code></pre>
            <p>When using  <a href="https://workers.cloudflare.com/">Cloudflare Workers</a>, the code would be similar to:</p>
            <pre><code>request.headers.set("X-Header-Name", "custom")</code></pre>
            <p>Each of these lines of code would add a custom HTTP request header to the next-hop destination with a name of ‘X-Header-Name’ and a value of ‘custom’.</p>
    <div>
      <h3>Dynamic modification of HTTP request headers</h3>
      <a href="#dynamic-modification-of-http-request-headers">
        
      </a>
    </div>
    <p>“HTTP Request Header Modification” is now available for all Cloudflare plans, within Transform Rules. It gives control to administrators by providing the ability to modify HTTP request headers before they're sent to their own origin servers or third-party services such as SaaS providers.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7I5NghBj6EckxUgICOdPDK/9f76ebb9ad6b66d15beb7888fdbaf361/image5-1.png" />
            
            </figure><p>Transform Rules allows users to modify up to 10 HTTP request headers per rule using one of three options:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3UEQhQfcvvrHW8cu6QzBSU/93f44b01004009738966fa518219570e/image4-2.png" />
            
            </figure><p><b>‘Set dynamic’</b> should be used when the value of a HTTP request header needs to be populated dynamically for each HTTP request. Examples include adding the Cloudflare Bot Management ‘bot score’ to each HTTP request, or the visitor’s country:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2sd5APjxAng8YJig4dsnoU/ff527dc79d4caec016b2b80301e5592d/image1-3.png" />
            
            </figure><p><b>‘Set static’</b> should be used to populate the value of a header with a static, literal string. This option should be used for simple header creation such as setting the source CDN (Cloudflare) or a shared secret:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2FLBXg7HFvgYubRVr80sI3/8e80f589827a3fc4cbe23aaa2482a081/image3-3.png" />
            
            </figure><p>In both "set" examples, if a header with the specified name already exists in the HTTP request, its value will be removed and replaced with the given value.</p><p><b>‘Remove’</b> is the final option, which should be used to remove all HTTP request headers with the specified name. For example, if you wanted to ensure the ‘cf-connecting-ip’ HTTP request header was removed, you would use a rule similar to the following one:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5Ju4GXquzb1Sgd5t4It714/1b9f5c9f70ecfe51706536f00e936020/image6-2.png" />
            
            </figure><p>Cloudflare <a href="https://developers.cloudflare.com/firewall/cf-firewall-language/functions">functions</a> can be used within ‘set dynamic’ header modifications. These functions include:</p><ul><li><p>concat()</p></li><li><p>regex_replace()</p></li><li><p>to_string()</p></li><li><p>lower()</p></li></ul><p>An example where functions are commonly used is concat() and to_string() used to take a list of different data types and concatenate to form a single header value. For example, <code><b>concat(“score=”,to_string(cf.bot_management.score))</b></code> would result in a header value of ‘score=85’.</p><p>Note: regular expression functions are only available for customers on Business and Enterprise plans.</p>
    <div>
      <h3>Try it now</h3>
      <a href="#try-it-now">
        
      </a>
    </div>
    <p>HTTP Request Header Modification can be used to improve operations, remove sensitive data, and increase security, amongst many other use cases. Try out the latest <a href="https://dash.cloudflare.com/">Transform Rule</a> yourself today.</p> ]]></content:encoded>
            <category><![CDATA[Transform Rules]]></category>
            <guid isPermaLink="false">7E2AMq36EW1tbi9Q2r3R59</guid>
            <dc:creator>Sam Marsh</dc:creator>
        </item>
        <item>
            <title><![CDATA[Dynamic URL Rewriting at the edge with Cloudflare]]></title>
            <link>https://blog.cloudflare.com/introducing-transform-rules-with-url-rewriting-at-the-edge/</link>
            <pubDate>Thu, 08 Apr 2021 09:33:00 GMT</pubDate>
            <description><![CDATA[ Today we are announcing the immediate availability of Transform Rules for all Cloudflare plans. Transform Rules provide Cloudflare administrators with the ability to create URL rewrite rules.  ]]></description>
            <content:encoded><![CDATA[ <p></p><p>URLs are ugly. They are hard to read, difficult to memorise and often auto-generated for the benefit of the origin server - not the user.</p><p>Today we are announcing the immediate availability of <b>Transform Rules</b> for <a href="https://www.cloudflare.com/plans/">all Cloudflare plans</a>. Transform Rules provide Cloudflare administrators with the ability to create URL rewrite rules. These rules transform HTTP requests as they flow through Cloudflare providing an interpretation layer between the <code>human friendly</code> and the <code>computer friendly</code>.</p>
    <div>
      <h3>Ease of understanding</h3>
      <a href="#ease-of-understanding">
        
      </a>
    </div>
    <p>Imagine you are going on a much needed around-the-world trip and want to buy a copy of John Graham-Cumming’s book <i>The Geek Atlas: 128 Places Where Science and Technology Come Alive</i> to use as inspiration. Would the link <a href="https://www.travelbooks247.com/dp/0596523203/">https://www.travelbooks247.com/dp/0596523203/</a> make sense to you? Chances are the answer is no. It's hard for humans to understand these complex, contextless URLs.</p><p>This is why companies instead provide user friendly alternatives such as: <a href="https://www.travelbooks247.com/Geek-Atlas-Places-Science-Technology/dp/0596523203/">https://www.travelbooks247.com/Geek-Atlas-Places-Science-Technology/dp/0596523203/</a> and use web servers as the interpreter. This interpretation is known as URL rewriting.</p><p>Large <a href="https://www.cloudflare.com/ecommerce/">ecommerce retailers</a> take HTTP requests to these human-friendly URLs and rewrite them using a simple pattern that strips the content <code>Geek-Atlas-Places-Science-Technology/</code> before sending the HTTP request to the backend. The human readable hyperlink is transformed into a simple format the back-end services can understand. This is an example of a <b>URL rewrite</b>.</p><p>This is common practice amongst online retailers such as large online auction platforms who follow similar practices, transforming HTTP requests to user-friendly URI Paths such as <code>/itm/The-Geek-Atlas-by-John-Graham-Cumming/333892143938</code> into <code>/itm/333892143938</code>. This is again done by stripping out the vanity-text ahead of sending the HTTP request to the origin. Literally any text can be entered in place of <code>..Geek-Atlas..</code>. in these HTTP requests. It all gets stripped.</p>
    <div>
      <h3>Maintaining control of your traffic</h3>
      <a href="#maintaining-control-of-your-traffic">
        
      </a>
    </div>
    <p>URL rewriting occurs when the request is received by the web server. This web server understands the friendly URL and knows its computer-generated counterpart. The web server retrieves the correct data and then sends it to the browser with no change to the URL in the browser’s address bar.  Common server-side implementations include the well-known <a href="http://httpd.apache.org/docs/current/mod/mod_rewrite.html">mod_rewrite</a> and <a href="http://nginx.org/en/docs/http/ngx_http_rewrite_module.html">ngx_http_rewrite_module</a> modules.</p><p>Historically these web servers were located physically within a company's data center. Administrators then had full control over the URLs received, and could create the interpretation rules as and when needed.</p><p>As the world rapidly migrates on-premise applications and solutions to the cloud, administrators can find themselves in a situation where they can no longer do what they previously could. Not being responsible for the origin has a number of benefits, but it also comes with drawbacks such as lack of <code>control</code>. Previously, an administrator could quickly add a few config lines to the web server in front of their ecommerce platform. Moving to an online hosted platform makes this much more difficult to do. With the introduction of Cloudflare’s Transform Rules we are giving traffic control back to administrators, allowing them to reroute or modify HTTP requests before they're passed to servers they do not administer.</p>
    <div>
      <h3>Announcing Transform Rules</h3>
      <a href="#announcing-transform-rules">
        
      </a>
    </div>
    <p>Transform Rules allow the creation of traffic modification rules using URL rewrites, with plans to support additional rule types in the near future (such as HTTP request header modification).</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2BTu2jN8BY6XUIQVKCAAwL/48c2acf88915373fb0adab88625e320b/image3-1.png" />
            
            </figure>
    <div>
      <h3>Dynamic and static rewrites</h3>
      <a href="#dynamic-and-static-rewrites">
        
      </a>
    </div>
    <p>The first available Transform Rule action is <code>rewrite</code>. It allows users to match on HTTP requests and modify the URI Path and URI Query using either <b>static</b> or <b>dynamic</b> rewrites.</p><p>A static rewrite changes a specified URI Path/Query to another. For example, users may want to transform all traffic addressed at the URI Path <code>/index.php</code> to <code>/landing.php</code>.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4SWuZGRHOXH3NbHtz7xh4f/dec4543e6dc67042fd22a94bae12d9e3/image1-1.png" />
            
            </figure><p>With a dynamic rewrite you can use <a href="https://developers.cloudflare.com/firewall/cf-firewall-rules/fields-and-expressions/">expressions</a> within the filter to transform traffic based on the specified pattern. For example, you might want to modify HTTP requests addressed from <code>www.example.com/assets/*</code> to <code>www.example.com/internal/files/assets/*</code> using a single dynamic rewrite rule. In this case, you would need to modify the first component of the path using the regex_replace() function. This function allows replacing parts of the value, based on an RE-2 compatible regular expression:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5kU2ux2DmabnnaeOebjkqF/6d4d8ffa206a14f288e5ccbe01618544/image7-1.png" />
            
            </figure><p>Another function is concat(). For example, if you wanted to change all requests with a URI Path of <code>/news/2012/*</code> to <code>/archive/news/2012/*</code>, you could use the concat() function in the dynamic rewrite expression. In our example, this would become:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/Wt5iH1vxDtv86H4IpN7UQ/770c60958c7ae7be648f71d011c4758e/image5-2.png" />
            
            </figure><p>You can use rewrite rules, both static and dynamic, to modify both the URI Path and URI Query, either in conjunction or independently. For example, you could use a URI rewrite to strip the URI Query value from matching HTTP requests by setting up a static rewrite and leaving the field blank:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6EajPgJ0yuQ0Mlam4KuUaL/6282a92e8befc1a71c657c673c13f795/image4-1.png" />
            
            </figure><p>This kind of rewrite can be used for SEO purposes and to prevent cache poisoning.</p>
    <div>
      <h3>When do we rewrite requests?</h3>
      <a href="#when-do-we-rewrite-requests">
        
      </a>
    </div>
    <p>One question that arose during the development of this feature was the following: “Where should Transform Rules happen in the Cloudflare traffic flow?”.</p><p>Originally, the “rewrite” action was added to the Firewall Rules section as a <code>bolt-on</code>. This allowed us to quickly develop the functionality and iterate, given it shares the same underlying engine. Once we began testing, we learned that Transform Rules must happen practically before anything else (at the application layer or layer 7), otherwise it may get confusing.</p><p>For example, if a user were to have a simple rewrite rule to take <code>/soccer/*</code> and transform it to <code>/football/*</code>, what would happen to Page Rules, Firewall Rules, and Worker Routes, for example, that filter on <code>football</code>? The answer is they <i>wouldn't</i> trigger, since the URL they would get would have been <code>/soccer</code>. Therefore, to simplify the experience, we made the decision to execute URL rewrite rules on traffic immediately as it enters the Cloudflare edge. This way, we can guarantee the URL that is passed to subsequent Cloudflare products. Predictability is absolutely key.</p>
    <div>
      <h3>Redirect vs. rewrite</h3>
      <a href="#redirect-vs-rewrite">
        
      </a>
    </div>
    <p>There are two common methods to change where an HTTP request is sent.</p><p>Firstly, there is a <i>URL redirect</i>, also known as ‘forwarding’. This is a server-side response that tells the client to go to another URL. This means that the URL displayed in the browser’s address bar gets updated to the new URL:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6T4NLF1BLJz44gB9yLMQwP/73619231537ac12d2f6db1b9d748f0d8/image2.gif" />
            
            </figure><p>Secondly, there is a <i>URL rewrite</i>. This is a server-side modification of the URL before it is fully processed by the web server. This will not change what is seen in the user’s browser.</p><p>One of the most common uses of URL rewriting is creating human-friendly, memorable links. Rather than <a href="http://example.com/$GUID,">http://example.com/abcsd232sxa112,</a> which may be easily generated and parsed as a database ID, it's easier for humans to read a URL like <a href="http://example.com/some-descriptive-product-name.">http://example.com/some-descriptive-product-name</a>.</p>
    <div>
      <h3>Normalization</h3>
      <a href="#normalization">
        
      </a>
    </div>
    <p>We have also added new security functionality which closes a potential attack vector. This feature prevents malicious actors from potentially bypassing security rules within Cloudflare products using URL-encoding in HTTP requests. We have made this functionality available to all plans and, unless we’ve reached out to you directly via email, it was enabled by default in your zones before this blog was posted.</p><p>A number of Cloudflare products have historically used the URI of an incoming HTTP request in a literal sense when comparing it against user defined filters. For example, to block a URL like “<a href="https://example.com/%6ogin">https://example.com/%6ogin</a>”, a user would have to create a Firewall Rule explicitly matching the URI Path <code>/%ogin</code>, rather than simply entering <code>/login</code> and expecting Cloudflare to figure out all the possible URL-encoded matches.</p><p>URL Normalization is now available for all Cloudflare users, with Edge Normalization enabled by default. This enhanced protection ensures that URL encoding cannot be used to bypass security features. In addition, it also simplifies the user experience by normalizing all inbound traffic into a standard format before it reaches other Cloudflare products such as Firewall Rules, Page Rules, and Workers.</p><p>For more information please refer to the KB article <a href="https://support.cloudflare.com/hc/en-us/articles/360057896851">here</a>.</p>
    <div>
      <h3>A new home for page rules</h3>
      <a href="#a-new-home-for-page-rules">
        
      </a>
    </div>
    <p>You may have noticed that Page Rules has been renamed to “Rules” in the top-level navigation in the UI. You can now find Page Rules under ‘Rules’, alongside Transform Rules:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/cBiUpGgd2Mj6FqoGr5mz9/9d9be6bb2e36582f5152bb87f59869a1/image8-1.png" />
            
            </figure><p>This move allows us to add new rule categories such as Transform Rules. All API endpoints remain unchanged.</p>
    <div>
      <h3>Try it now</h3>
      <a href="#try-it-now">
        
      </a>
    </div>
    <p>URL Rewriting can be used to improve SEO, secure your zone further, and to improve the experience of your users and customers. Try out the new <a href="https://dash.cloudflare.com/">Transform Rules</a> yourself today.</p> ]]></content:encoded>
            <category><![CDATA[Transform Rules]]></category>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[Security]]></category>
            <guid isPermaLink="false">5bucFYCFWqBvWyD4T0eocm</guid>
            <dc:creator>Sam Marsh</dc:creator>
        </item>
    </channel>
</rss>