From 6ff1d8f4ace2a15a8bb3fe6d95fb1b0e535b0191 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ad=C3=A1mek?= Date: Wed, 1 Apr 2026 15:20:06 +0200 Subject: [PATCH] fix(nginx): collapse multi-hop redirect chains to final destinations Point old URLs directly to their final destinations instead of bouncing through intermediate redirects that themselves redirect again. Fixes 14 multi-hop chains: - Client library paths (/apify-client-js, /apify-client-python, /api/client/python) now go directly to /docs pages - /scraping/* paths now go directly to /academy/apify-scrapers/* - /scraping and /tutorials now go directly to /platform/actors/running - /web-scraping-101 now goes directly to /academy/scraping-basics-javascript - /platform/web-scraping-101 and /platform/robotic-process-automation now go directly to final destinations instead of through removed /academy/concepts/* pages Co-Authored-By: Claude Opus 4.6 (1M context) --- nginx.conf | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/nginx.conf b/nginx.conf index 9969d01e4d..fa7b92b235 100644 --- a/nginx.conf +++ b/nginx.conf @@ -285,9 +285,9 @@ server { rewrite ^/scheduler$ /platform/schedules permanent; rewrite ^/schedules$ /platform/schedules permanent; rewrite ^/storage$ /platform/storage permanent; - rewrite ^/scraping$ /platform/tutorials permanent; - rewrite ^/tutorials$ /platform/tutorials permanent; - rewrite ^/web-scraping-101$ /platform/web-scraping-101 permanent; + rewrite ^/scraping$ /platform/actors/running permanent; + rewrite ^/tutorials$ /platform/actors/running permanent; + rewrite ^/web-scraping-101$ /academy/scraping-basics-javascript?legacy-js-course=/ permanent; rewrite ^/access-rights/list-of-permissions$ /platform/access-rights/list-of-permissions permanent; rewrite ^/access-rights/organization-account$ /platform/access-rights/organization-account permanent; rewrite ^/actor/development$ /platform/actors/development permanent; @@ -399,14 +399,14 @@ server { rewrite ^/proxy/google-serp-proxy/examples$ /platform/proxy/google-serp-proxy/examples permanent; rewrite ^/proxy/residential-proxy/tips-and-tricks$ /platform/proxy/residential-proxy permanent; rewrite ^/platform/proxy/residential-proxy/tips-and-tricks$ /platform/proxy/residential-proxy permanent; - rewrite ^/scraping/cheerio-scraper$ /platform/tutorials/apify-scrapers/cheerio-scraper permanent; - rewrite ^/tutorials/apify-scrapers/cheerio-scraper$ /platform/tutorials/apify-scrapers/cheerio-scraper permanent; - rewrite ^/scraping/getting-started$ /platform/tutorials/apify-scrapers/getting-started permanent; - rewrite ^/tutorials/apify-scrapers/getting-started$ /platform/tutorials/apify-scrapers/getting-started permanent; - rewrite ^/scraping/puppeteer-scraper$ /platform/tutorials/apify-scrapers/puppeteer-scraper permanent; - rewrite ^/tutorials/apify-scrapers/puppeteer-scraper$ /platform/tutorials/apify-scrapers/puppeteer-scraper permanent; - rewrite ^/scraping/web-scraper$ /platform/tutorials/apify-scrapers/web-scraper permanent; - rewrite ^/tutorials/apify-scrapers/web-scraper$ /platform/tutorials/apify-scrapers/web-scraper permanent; + rewrite ^/scraping/cheerio-scraper$ /academy/apify-scrapers/cheerio-scraper permanent; + rewrite ^/tutorials/apify-scrapers/cheerio-scraper$ /academy/apify-scrapers/cheerio-scraper permanent; + rewrite ^/scraping/getting-started$ /academy/apify-scrapers/getting-started permanent; + rewrite ^/tutorials/apify-scrapers/getting-started$ /academy/apify-scrapers/getting-started permanent; + rewrite ^/scraping/puppeteer-scraper$ /academy/apify-scrapers/puppeteer-scraper permanent; + rewrite ^/tutorials/apify-scrapers/puppeteer-scraper$ /academy/apify-scrapers/puppeteer-scraper permanent; + rewrite ^/scraping/web-scraper$ /academy/apify-scrapers/web-scraper permanent; + rewrite ^/tutorials/apify-scrapers/web-scraper$ /academy/apify-scrapers/web-scraper permanent; rewrite ^/academy/apify-platform/deploying-your-code$ /academy/deploying-your-code permanent; rewrite ^/academy/apify-platform/get-most-of-actors$ /academy/get-most-of-actors permanent; @@ -516,13 +516,13 @@ server { rewrite ^/sdk/js/docs/typedefs(.*)$ /sdk/js/docs/2.3/typedefs$1 redirect; # old integrated docs -> new docs in GH pages - rewrite ^/apify-client-js/?$ /api/client/js redirect; - rewrite ^/apify-client-js/latest/?$ /api/client/js redirect; - rewrite ^/apify-client-python/?$ /api/client/python redirect; + rewrite ^/apify-client-js/?$ /api/client/js/docs redirect; + rewrite ^/apify-client-js/latest/?$ /api/client/js/docs redirect; + rewrite ^/apify-client-python/?$ /api/client/python/docs redirect; # Landing page removal redirects - redirect root paths to docs pages rewrite ^/api/client/js/?$ /api/client/js/docs permanent; - rewrite ^/api/client/python/?$ /api/client/python/docs/overview permanent; + rewrite ^/api/client/python/?$ /api/client/python/docs permanent; rewrite ^/sdk/js/?$ /sdk/js/docs/overview permanent; rewrite ^/sdk/python/?$ /sdk/python/docs/overview permanent; rewrite ^/cli/?$ /cli/docs permanent; @@ -543,11 +543,11 @@ server { # Articles moved from the platform documentation to the Academy # Web Scraping 101 - rewrite ^/platform/web-scraping-101$ /academy/web-scraping-for-beginners redirect; + rewrite ^/platform/web-scraping-101$ /academy/scraping-basics-javascript?legacy-js-course=/ redirect; rewrite ^/platform/web-scraping-101/anti-scraping-techniques$ /academy/anti-scraping/techniques redirect; - rewrite ^/platform/web-scraping-101/web-scraping-techniques$ /academy/concepts redirect; + rewrite ^/platform/web-scraping-101/web-scraping-techniques$ / redirect; # RPA - rewrite ^/platform/robotic-process-automation$ /academy/concepts/robotic-process-automation redirect; + rewrite ^/platform/robotic-process-automation$ / redirect; rewrite ^/platform/robotic-process-automation/tips-and-tricks$ /academy/advanced-web-scraping/tips-and-tricks-robustness redirect; # Tutorials rewrite ^/platform/tutorials/scraping-dynamic-content$ /academy/puppeteer-playwright/page/waiting redirect;