PHPackages                             oqlf/oqlf\_ratelimit - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [HTTP &amp; Networking](/categories/http)
4. /
5. oqlf/oqlf\_ratelimit

ActiveTypo3-cms-extension[HTTP &amp; Networking](/categories/http)

oqlf/oqlf\_ratelimit
====================

Typo3 middleware limitting the number of requests over time a client can make

1.0.6(2mo ago)083↓100%GPL-2.0-or-laterPHPPHP &gt;=7.0

Since Sep 19Pushed 2mo agoCompare

[ Source](https://github.com/OQLF/oqlf_ratelimit)[ Packagist](https://packagist.org/packages/oqlf/oqlf_ratelimit)[ RSS](/packages/oqlf-oqlf-ratelimit/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (1)Versions (8)Used By (0)

oqlf\_ratelimit
===============

[](#oqlf_ratelimit)

> a Typo3 middleware to limit legitimate and illegitimate bots from hammering on computationally expensive website resources.

What does it do?
----------------

[](#what-does-it-do)

This extension allows you to set global and per IP group limits on how many times a resource can be requested in a configurable timeframe. When this limit is reached, the clients receive a `429 Too Many Requests` and a `Retry-After:` header telling them to cool down and retry at a slower pace.

[Rate limiting with 429 Too Many Requests](https://developer.mozilla.org/en-US/docs/Glossary/Rate_limit)

Why was this extension created?
-------------------------------

[](#why-was-this-extension-created)

My Typo3 website has a multi-page generated sitemap that requires a lot of database calls to produce. Search engine crawlers will request the index and then proceed to download all the pages in rapid succession, which bring my infrastructure to its knees. With oqlf\_ratelimit, I set /sitemap.xml (which covers /sitemap.xml, /sitemap.xml?page=1, /sitemap.xml?page=2,..) to have a maximum of 5 calls total / 10 seconds or 3 calls in an IP group / 10 seconds. With this limit, a well-behaved search engine crawler will download the first 3 pages, then get a 429 on the next few requests. It will understand that it needs to slow down and retry at a slower pace.

It's particularly effective on Googlebot, which reacts very nicely and quickly adapts to your rules. In the case of not-so-polite search engine bots, AI learning crawlers, or even illegitimate bots, they will be limited to a few costly requests and then will only receive free-to-you empty 429 replies.

Inspired by

Configuration
-------------

[](#configuration)

All configuration is done in the Settings-&gt;Extension configuration module.

### Redis server setup

[](#redis-server-setup)

[![Redis server setup](Resources/Public/Redis.png)](Resources/Public/Redis.png)

### Page limit setup

[](#page-limit-setup)

Up to 5 different limited resources can be set. Leave the path field empty if unused.

The path field will be matched against the start of the URL after the domain and the leading slash. The example below match https:∕∕www.example.com/**sitemap.xml** which will limit requests for:

- https:∕∕www.example.com/**sitemap.xml**
- https:∕∕www.example.com/**sitemap.xml**/anything
- https:∕∕www.example.com/**sitemap.xml**?page=12

[![Page limit setup](Resources/Public/Page_limit.png)](Resources/Public/Page_limit.png)

Requirements
------------

[](#requirements)

As of now, I haven't tested on TYPO3 lower than v13, but I see no reason it wouldn't work on v12, maybe even v11 and v10. I'll update the requirements if I have returns from other users or have time to test myself sometime.

It also requires a Redis or Valkey server v7 or greater for both, which you may already be using for the Typo3 cache. In this case, you can just use the same server.

###  Health Score

37

—

LowBetter than 83% of packages

Maintenance86

Actively maintained with recent releases

Popularity12

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity35

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~27 days

Recently: every ~4 days

Total

7

Last Release

69d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/764d0f3d2454641b8ec7783c0e1c5e9b8c6591290c416841ce6799971ad642a1?d=identicon)[nalmar](/maintainers/nalmar)

---

Top Contributors

[![nalmar](https://avatars.githubusercontent.com/u/10710110?v=4)](https://github.com/nalmar "nalmar (12 commits)")

### Embed Badge

![Health badge](/badges/oqlf-oqlf-ratelimit/health.svg)

```
[![Health](https://phpackages.com/badges/oqlf-oqlf-ratelimit/health.svg)](https://phpackages.com/packages/oqlf-oqlf-ratelimit)
```

###  Alternatives

[cundd/rest

REST API for TYPO3 CMS

78120.0k1](/packages/cundd-rest)[aoe/restler

A TYPO3-Extension, that integrates the popular PHP REST-framework Restler in TYPO3.

3177.5k1](/packages/aoe-restler)[b13/http2

Speed up TYPO3 rendering via HTTP/2 Server Push

23339.1k](/packages/b13-http2)[causal/routing

Service to route HTTP/REST requests to your own controller/actions.

1919.9k](/packages/causal-routing)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
