diff --git a/nginx.conf b/nginx.conf index 353b8cd1d..2a70ef8d3 100644 --- a/nginx.conf +++ b/nginx.conf @@ -1,509 +1,525 @@ +# Map Accept headers to Markdown flag map $http_accept $wants_markdown { - default 0; - "~*text/markdown" 1; - "~*text/plain" 1; + default 0; + "~*text/markdown" 1; + "~*text/plain" 1; +} + +# Define named upstream for local dev +upstream local_docs { + server 127.0.0.1:3000; +} + +# Map host to upstream +map $host $docs_upstream { + "docs.apify.com" https://apify.github.io/apify-docs; # production + default http://local_docs; # local dev } server { - listen 0.0.0.0:8080; - server_name 'docs.apify.com'; - - # homepage: only rewrite to internal proxy when client wants markdown - location = / { - if ($wants_markdown) { - # use 'last' to force a new location lookup so /__proxy/ handler runs - rewrite ^ /__proxy/llms.txt last; + listen 0.0.0.0:8080; + server_name docs.apify.loc docs.apify.com; + + # Homepage: llms.txt fallback + location = / { + if ($wants_markdown) { + rewrite ^ /__proxy/llms.txt last; + } + proxy_pass $docs_upstream; + proxy_redirect https://apify.github.io/ https://apify.github.io/apify-docs/; + } + + # Direct llms.txt files + location = /llms.txt { + proxy_pass $docs_upstream/llms.txt; + proxy_hide_header Content-Type; + add_header Content-Type "text/markdown; charset=utf-8" always; + proxy_redirect https://apify.github.io/ https://apify.github.io/apify-docs/; + } + + location = /llms-full.txt { + proxy_pass $docs_upstream/llms-full.txt; + proxy_hide_header Content-Type; + add_header Content-Type "text/markdown; charset=utf-8" always; + proxy_redirect https://apify.github.io/ https://apify.github.io/apify-docs/; } - proxy_pass https://apify.github.io/apify-docs/; - } - - # direct llms.txt files, serve with markdown content type - location /llms.txt { - proxy_pass https://apify.github.io/apify-docs/llms.txt; - proxy_hide_header Content-Type; - add_header Content-Type "text/markdown; charset=utf-8" always; - } - location /llms-full.txt { - proxy_pass https://apify.github.io/apify-docs/llms-full.txt; - proxy_hide_header Content-Type; - add_header Content-Type "text/markdown; charset=utf-8" always; - } - - # generic docs fallback: rewrite clean URLs to .md when client wants markdown - location / { - if ($wants_markdown) { - # rewrite to internal proxy path; use last so new location is matched - rewrite ^(/[^.]+)$ /__proxy$1.md last; + + # Generic Markdown fallback for all URLs + location / { + if ($wants_markdown) { + # rewrite clean URLs or URLs ending in .md to internal proxy + rewrite ^(/.*\.md)$ /__proxy$1 last; # already .md + rewrite ^(/.*[^/.])$ /__proxy$1.md last; # no extension + } + proxy_pass $docs_upstream; + proxy_redirect https://apify.github.io/ https://apify.github.io/apify-docs/; } - proxy_pass https://apify.github.io/apify-docs/; - } - # internal proxy handler that actually forces the markdown header - location ^~ /__proxy/ { - internal; + # Internal proxy for Markdown handling + location ^~ /__proxy/ { + internal; + rewrite ^/__proxy/(.*)$ /$1 break; - # strip the /__proxy prefix so upstream sees the real path - rewrite ^/__proxy(/.*)$ $1 break; + proxy_pass $docs_upstream; + proxy_hide_header Content-Type; + add_header Content-Type "text/markdown; charset=utf-8" always; - proxy_pass https://apify.github.io/apify-docs/; - proxy_hide_header Content-Type; - add_header Content-Type "text/markdown; charset=utf-8" always; - } + proxy_redirect https://apify.github.io/ https://apify.github.io/apify-docs/; + } # proxies to other repositories - location /api/client/js { - proxy_pass https://apify.github.io/apify-client-js/; - } - location /api/client/python { - proxy_pass https://apify.github.io/apify-client-python/; - } - location /sdk/js { - proxy_pass https://apify.github.io/apify-sdk-js/; - } - location /sdk/python { - proxy_pass https://apify.github.io/apify-sdk-python/; - } - location /cli { - proxy_pass https://apify.github.io/apify-cli/; - } - location = /health { - access_log off; - add_header 'Content-Type' 'application/json'; - return 200 '{"status":"UP"}'; - } - - # generated via `node tools/convert.mjs` inside the docs repository - rewrite ^/about$ /platform/about permanent; - rewrite ^/access-rights$ /platform/access-rights permanent; - rewrite ^/actor$ /platform/actors permanent; - rewrite ^/actors$ /platform/actors permanent; - rewrite ^/tutorials/integrations$ /platform/integrations permanent; - rewrite ^/integrations$ /platform/integrations permanent; - rewrite ^/monitoring$ /platform/monitoring permanent; - rewrite ^/proxy$ /platform/proxy permanent; - rewrite ^/robotic-process-automation$ /platform/robotic-process-automation permanent; - 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 ^/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; - rewrite ^/actors/development$ /platform/actors/development permanent; - rewrite ^/actor/examples$ /platform/actors/examples permanent; - rewrite ^/actors/examples$ /platform/actors/examples permanent; - rewrite ^/actor/limits$ /platform/actors/limits permanent; - rewrite ^/actors/limits$ /platform/actors/limits permanent; - rewrite ^/actors/paid-actors$ /platform/actors/paid-actors permanent; - rewrite ^/actors/publishing$ /platform/actors/publishing permanent; - rewrite ^/actor/run$ /platform/actors/running permanent; - rewrite ^/actor/running$ /platform/actors/running permanent; - rewrite ^/actors/run$ /platform/actors/running permanent; - rewrite ^/actors/running$ /platform/actors/running permanent; - rewrite ^/actor/security$ /platform/actors/security permanent; - rewrite ^/actors/security$ /platform/actors/security permanent; - rewrite ^/tasks$ /platform/actors/tasks permanent; - rewrite ^/actors/tasks$ /platform/actors/tasks permanent; - rewrite ^/integrations/slack$ /platform/integrations/slack permanent; - rewrite ^/webhooks$ /platform/integrations/webhooks permanent; - rewrite ^/integrations/webhooks$ /platform/integrations/webhooks permanent; - rewrite ^/monitoring/actor-or-task-run-failure$ /platform/monitoring/actor-or-task-run-failure permanent; - rewrite ^/monitoring/check-data-quality$ /platform/monitoring/check-data-quality permanent; - rewrite ^/monitoring/monitor-multiple-tasks$ /platform/monitoring/monitor-multiple-tasks permanent; - rewrite ^/monitoring/monitor-shared-datasets$ /platform/monitoring/monitor-shared-datasets permanent; - rewrite ^/robotic-process-automation/tips-and-tricks$ /platform/robotic-process-automation/tips-and-tricks permanent; - rewrite ^/proxy/connection-settings$ /platform/proxy/connection-settings permanent; - rewrite ^/proxy/datacenter-proxy$ /platform/proxy/datacenter-proxy permanent; - rewrite ^/proxy/google-serp-proxy$ /platform/proxy/google-serp-proxy permanent; - rewrite ^/proxy/residential-proxy/nodejs-examples$ /platform/proxy/residential-proxy permanent; - rewrite ^/proxy/residential-proxy/python-examples$ /platform/proxy/residential-proxy permanent; - rewrite ^/proxy/residential-proxy/php-examples$ /platform/proxy/residential-proxy permanent; - rewrite ^/proxy/residential-proxy$ /platform/proxy/residential-proxy permanent; - rewrite ^/proxy/troubleshooting$ /platform/proxy/troubleshooting permanent; - rewrite ^/web-scraping-101/anti-scraping-techniques$ /platform/web-scraping-101/anti-scraping-techniques permanent; - rewrite ^/web-scraping-101/web-scraping-techniques$ /platform/web-scraping-101/web-scraping-techniques permanent; - rewrite ^/storage/dataset$ /platform/storage/dataset permanent; - rewrite ^/storage/key-value-store$ /platform/storage/key-value-store permanent; - rewrite ^/storage/request-queue$ /platform/storage/request-queue permanent; - rewrite ^/access-rights/organization-account/how-to-use$ /platform/access-rights/organization-account/how-to-use permanent; - rewrite ^/access-rights/organization-account/setup$ /platform/access-rights/organization-account/setup permanent; - rewrite ^/tutorials/analyze-pages-and-fix-errors$ /platform/tutorials/analyze-pages-and-fix-errors permanent; - rewrite ^/scraping$ /platform/tutorials/apify-scrapers permanent; - rewrite ^/tutorials/apify-scrapers$ /platform/tutorials/apify-scrapers permanent; - rewrite ^/tutorials/building-public-actors$ /platform/tutorials/building-public-actors permanent; - rewrite ^/tutorials/improve-performance-by-caching-repeated-page-data$ /platform/tutorials/cache-data-to-improve-performance permanent; - rewrite ^/tutorials/cache-data-to-improve-performance$ /platform/tutorials/cache-data-to-improve-performance permanent; - rewrite ^/tutorials/crawl-a-list-of-urls-from-a-google-sheets-document$ /platform/tutorials/crawl-urls-from-a-google-sheet permanent; - rewrite ^/tutorials/crawl-urls-from-google-sheets-document$ /platform/tutorials/crawl-urls-from-a-google-sheet permanent; - rewrite ^/tutorials/crawl-urls-from-a-google-sheet$ /platform/tutorials/crawl-urls-from-a-google-sheet permanent; - rewrite ^/tutorials/log-in-by-transferring-cookies$ /platform/tutorials/log-in-by-transferring-cookies permanent; - rewrite ^/tutorials/log-into-a-website-using-puppeteer$ /platform/tutorials/log-into-a-website-using-puppeteer permanent; - rewrite ^/tutorials/process-data-using-python$ /platform/tutorials/process-data-using-python permanent; - rewrite ^/actor/quick-start$ /platform/tutorials/quick-start permanent; - rewrite ^/actors/quick-start$ /platform/tutorials/quick-start permanent; - rewrite ^/tutorials/quick-start$ /platform/tutorials/quick-start permanent; - rewrite ^/tutorials/integrations/run-actor-and-retrieve-data-via-api$ /platform/tutorials/run-actor-and-retrieve-data-via-api permanent; - rewrite ^/tutorials/run-actor-and-retrieve-data-via-api$ /platform/tutorials/run-actor-and-retrieve-data-via-api permanent; - rewrite ^/tutorials/scrape-data-using-python$ /platform/tutorials/scrape-data-using-python permanent; - rewrite ^/tutorials/scrape-websites-with-limited-pagination$ /platform/tutorials/scrape-paginated-sites permanent; - rewrite ^/tutorials/scrape-paginated-sites$ /platform/tutorials/scrape-paginated-sites permanent; - rewrite ^/tutorials/scrape-websites-using-the-sitemap$ /platform/tutorials/scrape-websites-using-the-sitemap permanent; - rewrite ^/tutorials/scraping-dynamic-content$ /platform/tutorials/scraping-dynamic-content permanent; - rewrite ^/tutorials/use-apify-from-php$ /platform/tutorials/use-apify-from-php permanent; - rewrite ^/actors/running/compute-units$ /platform/actors/running/compute-units permanent; - rewrite ^/actor/run$ /platform/actors/running/input permanent; - rewrite ^/actor/running/input-and-output$ /platform/actors/running/input permanent; - rewrite ^/actors/running/input-and-output$ /platform/actors/running/input permanent; - rewrite ^/actors/running/input$ /platform/actors/running/input permanent; - rewrite ^/actors/memory-and-cpu$ /platform/actors/running/memory-and-cpu permanent; - rewrite ^/actors/running/memory-and-cpu$ /platform/actors/running/memory-and-cpu permanent; - rewrite ^/actors/development/actor-config$ /platform/actors/development/actor-config permanent; - rewrite ^/actor/development/base-docker-images$ /platform/actors/development/base-docker-images permanent; - rewrite ^/actors/development/base-docker-images$ /platform/actors/development/base-docker-images permanent; - rewrite ^/actor/build$ /platform/actors/development/builds permanent; - rewrite ^/actor/development/build$ /platform/actors/development/builds permanent; - rewrite ^/actor/development/builds$ /platform/actors/development/builds permanent; - rewrite ^/actors/build$ /platform/actors/development/builds permanent; - rewrite ^/actors/development/builds$ /platform/actors/development/builds permanent; - rewrite ^/actors/development/continuous-integration$ /platform/actors/development/continuous-integration permanent; - rewrite ^/actor/development/environment-variables$ /platform/actors/development/environment-variables permanent; - rewrite ^/actors/development/environment-variables$ /platform/actors/development/environment-variables permanent; - rewrite ^/actor/input-schema$ /platform/actors/development/input-schema permanent; - rewrite ^/actor/development/input-schema$ /platform/actors/development/input-schema permanent; - rewrite ^/actors/input-schema$ /platform/actors/development/input-schema permanent; - rewrite ^/actors/development/input-schema$ /platform/actors/development/input-schema permanent; - rewrite ^/actors/development/output-schema$ /platform/actors/development/output-schema permanent; - rewrite ^/actors/development/secret-input$ /platform/actors/development/secret-input permanent; - rewrite ^/actor/source-code$ /platform/actors/development/source-code permanent; - rewrite ^/actors/source-code$ /platform/actors/development/source-code permanent; - rewrite ^/actor/development/source-code$ /platform/actors/development/source-code permanent; - rewrite ^/actors/development/source-code$ /platform/actors/development/source-code permanent; - rewrite ^/actor/development/state-persistence$ /platform/actors/development/state-persistence permanent; - rewrite ^/actors/development/state-persistence$ /platform/actors/development/state-persistence permanent; - rewrite ^/actors/development/testing-and-maintenance$ /platform/actors/development/testing-and-maintenance permanent; - rewrite ^/webhooks/actions$ /platform/integrations/webhooks/actions permanent; - rewrite ^/integrations/webhooks/actions$ /platform/integrations/webhooks/actions permanent; - rewrite ^/webhooks/ad-hoc-webhooks$ /platform/integrations/webhooks/ad-hoc-webhooks permanent; - rewrite ^/integrations/webhooks/ad-hoc-webhooks$ /platform/integrations/webhooks/ad-hoc-webhooks permanent; - rewrite ^/webhooks/events$ /platform/integrations/webhooks/events permanent; - rewrite ^/integrations/webhooks/events$ /platform/integrations/webhooks/events permanent; - rewrite ^/proxy/datacenter-proxy/nodejs-examples$ /platform/proxy/datacenter-proxy/examples permanent; - rewrite ^/proxy/datacenter-proxy/python-examples$ /platform/proxy/datacenter-proxy/examples permanent; - rewrite ^/proxy/datacenter-proxy/php-examples$ /platform/proxy/datacenter-proxy/examples permanent; - rewrite ^/proxy/datacenter-proxy/examples$ /platform/proxy/datacenter-proxy/examples permanent; - rewrite ^/proxy/google-serp-proxy/nodejs-examples$ /platform/proxy/google-serp-proxy/examples permanent; - rewrite ^/proxy/google-serp-proxy/python-examples$ /platform/proxy/google-serp-proxy/examples permanent; - rewrite ^/proxy/google-serp-proxy/php-examples$ /platform/proxy/google-serp-proxy/examples permanent; - 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 ^/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; - rewrite ^/academy/apify-platform/getting-started$ /academy/getting-started permanent; - rewrite ^/academy/apify-platform/running-a-web-server$ /academy/running-a-web-server permanent; - rewrite ^/academy/apify-platform/deploying-your-code/deploying$ /academy/deploying-your-code/deploying permanent; - rewrite ^/academy/apify-platform/deploying-your-code/docker-file$ /academy/deploying-your-code/docker-file permanent; - rewrite ^/academy/apify-platform/deploying-your-code/input-schema$ /academy/deploying-your-code/input-schema permanent; - rewrite ^/academy/apify-platform/deploying-your-code/inputs-outputs$ /academy/deploying-your-code/inputs-outputs permanent; - rewrite ^/academy/apify-platform/get-most-of-actors/actor-readme$ /academy/get-most-of-actors/actor-readme permanent; - rewrite ^/academy/apify-platform/get-most-of-actors/monetizing-your-actor$ /academy/get-most-of-actors/monetizing-your-actor permanent; - rewrite ^/academy/apify-platform/get-most-of-actors/naming-your-actor$ /academy/get-most-of-actors/naming-your-actor permanent; - rewrite ^/academy/apify-platform/get-most-of-actors/seo-and-promotion$ /academy/get-most-of-actors/seo-and-promotion permanent; - rewrite ^/academy/apify-platform/getting-started/actors$ /academy/getting-started/actors permanent; - rewrite ^/academy/apify-platform/getting-started/apify-api$ /academy/getting-started/apify-api permanent; - rewrite ^/academy/apify-platform/getting-started/apify-client$ /academy/getting-started/apify-client permanent; - rewrite ^/academy/apify-platform/getting-started/creating-actors$ /academy/getting-started/creating-actors permanent; - rewrite ^/academy/apify-platform/getting-started/inputs-outputs$ /academy/getting-started/inputs-outputs permanent; - rewrite ^/academy/web-scraping-for-beginners/data-collection$ /academy/web-scraping-for-beginners/data-extraction permanent; - rewrite ^/academy/puppeteer-playwright/executing-scripts/extracting-data$ /academy/puppeteer-playwright/executing-scripts/collecting-data permanent; - rewrite ^/academy/web-scraping-for-beginners/data-collection/browser-devtools$ /academy/web-scraping-for-beginners/data-extraction/browser-devtools permanent; - rewrite ^/academy/web-scraping-for-beginners/data-collection/computer-preparation$ /academy/web-scraping-for-beginners/data-extraction/computer-preparation permanent; - rewrite ^/academy/web-scraping-for-beginners/data-collection/devtools-continued$ /academy/web-scraping-for-beginners/data-extraction/devtools-continued permanent; - rewrite ^/academy/web-scraping-for-beginners/data-collection/node-continued$ /academy/web-scraping-for-beginners/data-extraction/node-continued permanent; - rewrite ^/academy/web-scraping-for-beginners/data-collection/node-js-scraper$ /academy/web-scraping-for-beginners/data-extraction/node-js-scraper permanent; - rewrite ^/academy/web-scraping-for-beginners/data-collection/project-setup$ /academy/web-scraping-for-beginners/data-extraction/project-setup permanent; - rewrite ^/academy/web-scraping-for-beginners/data-collection/save-to-csv$ /academy/web-scraping-for-beginners/data-extraction/save-to-csv permanent; - rewrite ^/academy/web-scraping-for-beginners/data-collection/using-devtools$ /academy/web-scraping-for-beginners/data-extraction/using-devtools permanent; - rewrite ^/academy/web-scraping-for-beginners/crawling/processing-data$ /academy/web-scraping-for-beginners/crawling/exporting-data permanent; - rewrite ^/academy/web-scraping-for-beginners/crawling/recap-collection-basics$ /academy/web-scraping-for-beginners/crawling/recap-extraction-basics permanent; - rewrite ^/academy/php/using-apify-scraper-with-php$ /academy/php/use-apify-from-php permanent; - rewrite ^/api/client/?$ /api redirect; - - # unified api clients docs pages -> getting started page - rewrite ^/api/client/python/docs/quick-start$ /api/client/python/docs permanent; - rewrite ^/api/client/python/docs/features$ /api/client/python/docs permanent; - rewrite ^/api/client/python/docs/usage-concepts$ /api/client/python/docs permanent; - - rewrite ^/api/client/js/docs/quick-start$ /api/client/js/docs permanent; - rewrite ^/api/client/js/docs/features$ /api/client/js/docs permanent; - rewrite ^/api/client/js/docs/usage-concepts$ /api/client/js/docs permanent; - - # sdk/js/api -> sdk/js/reference - rewrite ^/sdk/js/api/apify(.*)$ /sdk/js/reference$1 permanent; - rewrite ^/sdk/js/api(.*)$ /sdk/js/reference$1 permanent; - rewrite ^/sdk/js/reference/apify(.*)$ /sdk/js/reference$1 redirect; - rewrite ^/sdk/js/reference/next/apify(.*)$ /sdk/js/reference/next$1 redirect; - rewrite ^/sdk/js/docs$ /sdk/js/docs/guides/apify-platform$1 redirect; - rewrite ^/sdk/js/docs/next$ /sdk/js/docs/next/guides/apify-platform$1 redirect; - rewrite ^/sdk/js/docs/guides/getting-started$ /sdk/js/docs/next/guides/apify-platform$1 redirect; - rewrite ^/sdk/js/docs/next/guides/getting-started$ /sdk/js/docs/next/guides/apify-platform$1 redirect; - - # old sdk version redirects (we keep only latest, and version only major/minor) - rewrite ^/sdk/js/docs/1\.\d+\.\d+(.*)$ /sdk/js/docs/1.3$1 redirect; - rewrite ^/sdk/js/docs/2\.\d+\.\d+(.*)$ /sdk/js/docs/2.3$1 redirect; - rewrite ^/sdk/js/docs/api(.*)$ /sdk/js/docs/2.3/api$1 redirect; - 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; - - # add trailing slashes to the root of GH pages docs - rewrite ^/api/client/js$ /api/client/js/ redirect; - rewrite ^/api/client/python$ /api/client/python/ redirect; - rewrite ^/sdk/js$ /sdk/js/ redirect; - rewrite ^/sdk/python$ /sdk/python/ redirect; - rewrite ^/cli$ /cli/ redirect; - - # versions page redirects - rewrite ^/versions/?$ / permanent; # no docs-wide changelog, redirect to the root - rewrite ^/cli/versions/?$ /cli/docs/changelog permanent; - rewrite ^/sdk/js/versions/?$ /sdk/js/docs/changelog permanent; - rewrite ^/api/client/js/versions/?$ /api/client/js/docs/changelog permanent; - - # legacy links in some Actor READMEs - rewrite ^/scraping/tutorial/introduction$ /academy/apify-scrapers/getting-started permanent; - rewrite ^/scraping/tutorial/web-scraper$ /academy/apify-scrapers/web-scraper permanent; - - # 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/anti-scraping-techniques$ /academy/anti-scraping/techniques redirect; - rewrite ^/platform/web-scraping-101/web-scraping-techniques$ /academy/concepts redirect; - # RPA - rewrite ^/platform/robotic-process-automation$ /academy/concepts/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; - rewrite ^/platform/tutorials/log-into-a-website-using-puppeteer$ /academy/puppeteer-playwright/common-use-cases/logging-into-a-website redirect; - rewrite ^/platform/tutorials/cache-data-to-improve-performance$ /academy/expert-scraping-with-apify/saving-useful-stats redirect; - rewrite ^/platform/tutorials/scrape-websites-using-the-sitemap$ /academy/tutorials/scraping-with-sitemaps redirect; - rewrite ^/platform/tutorials/analyze-pages-and-fix-errors$ /academy/analyzing-pages-and-fixing-errors redirect; - rewrite ^/platform/tutorials/crawl-urls-from-a-google-sheet$ /academy/node-js/scraping-urls-list-from-google-sheets redirect; - rewrite ^/platform/tutorials/log-in-by-transferring-cookies$ /academy/tools/edit-this-cookie redirect; - rewrite ^/platform/tutorials/scrape-data-using-python$ /academy/python/scrape-data-python redirect; - rewrite ^/platform/tutorials/process-data-using-python$ /academy/python/process-data-using-python redirect; - rewrite ^/platform/tutorials/use-apify-from-php$ /academy/php/using-apify-scraper-with-php redirect; - rewrite ^/platform/tutorials/scrape-paginated-sites$ /academy/advanced-web-scraping/scraping-paginated-sites redirect; - rewrite ^/platform/tutorials/apify-scrapers$ /academy/apify-scrapers redirect; - rewrite ^/platform/tutorials/apify-scrapers/getting-started$ /academy/apify-scrapers/getting-started redirect; - rewrite ^/platform/tutorials/apify-scrapers/web-scraper$ /academy/apify-scrapers/web-scraper redirect; - rewrite ^/platform/tutorials/apify-scrapers/cheerio-scraper$ /academy/apify-scrapers/cheerio-scraper redirect; - rewrite ^/platform/tutorials/apify-scrapers/puppeteer-scraper$ /academy/apify-scrapers/puppeteer-scraper redirect; - rewrite ^/platform/tutorials/run-actor-and-retrieve-data-via-api$ /academy/api/run-actor-and-retrieve-data-via-api redirect; - - # Reorganization of docs: Basic - rewrite ^/platform/tutorials/building-public-actors$ /platform/actors/publishing redirect; - rewrite ^/platform/actors/paid-actors$ /platform/actors/running/actors-in-store#paid-actors redirect; - rewrite ^/platform/actors/tasks$ /platform/actors/running/tasks redirect; - rewrite ^/platform/actors/running/compute-units$ /platform/actors/running/usage-and-resources#what-is-a-compute-unit-cu redirect; - rewrite ^/platform/actors/running/memory-and-cpu$ /platform/actors/running/usage-and-resources#memory redirect; - rewrite ^/platform/actors/running/input$ /platform/actors/running/input-and-output#input redirect; - rewrite ^/platform/actors/security$ /platform/security redirect; - rewrite ^/platform/actors/limits$ /platform/limits redirect; - - # Reorganization of docs: Home - rewrite ^/platform/about$ /platform redirect; - rewrite ^/platform/tutorials/quick-start$ /platform/actors/running redirect; - rewrite ^/platform/tutorials$ /platform/actors/running redirect; - - # Reorganization of docs: Access rights - rewrite ^/platform/access-rights$ /platform/collaboration/access-rights redirect; - rewrite ^/platform/access-rights/organization-account$ /platform/collaboration/organization-account redirect; - rewrite ^/platform/access-rights/organization-account/setup$ /platform/collaboration/organization-account/setup redirect; - rewrite ^/platform/access-rights/organization-account/how-to-use$ /platform/collaboration/organization-account/how-to-use redirect; - rewrite ^/platform/access-rights/list-of-permissions$ /platform/collaboration/list-of-permissions redirect; - - # Reorganization of development section - rewrite ^/platform/actors/development/actor-config$ /platform/actors/development/actor-definition/actor-json redirect; - rewrite ^/platform/actors/development/base-docker-images$ /platform/actors/development/actor-definition/dockerfile redirect; - rewrite ^/platform/actors/development/secret-input$ /platform/actors/development/actor-definition/input-schema/secret-input redirect; - rewrite ^/platform/actors/development/input-schema$ /platform/actors/development/actor-definition/input-schema/specification/v1 redirect; - rewrite ^/platform/actors/development/output-schema$ /platform/actors/development/actor-definition/output-schema redirect; - rewrite ^/platform/actors/development/container-web-server$ /platform/actors/development/programming-interface/container-web-server redirect; - rewrite ^/platform/actors/development/environment-variables$ /platform/actors/development/programming-interface/environment-variables redirect; - rewrite ^/platform/actors/development/builds$ /platform/actors/development/builds-and-runs/builds redirect; - rewrite ^/platform/actors/development/state-persistence$ /platform/actors/development/builds-and-runs/state-persistence redirect; - rewrite ^/platform/actors/development/continuous-integration$ /platform/actors/development/deployment/continuous-integration redirect; - rewrite ^/platform/actors/development/testing-and-maintenance$ /platform/actors/development/deployment/automated-tests redirect; - rewrite ^/platform/actors/development/source-code$ /platform/actors/development/deployment/source-types redirect; - - # Rename output schema to dataset schema - rewrite ^/platform/actors/development/actor-definition/output-schema$ /platform/actors/development/actor-definition/dataset-schema permanent; - rewrite ^academy/deploying-your-code/output-schema$ /academy/deploying-your-code/dataset-schema permanent; - - # Academy restructuring - rewrite ^academy/advanced-web-scraping/scraping-paginated-sites$ /academy/advanced-web-scraping/crawling/crawling-with-search permanent; - rewrite ^academy/php$ /academy/php/use-apify-from-php redirect; # not permanent in case we want to reuse /php in the future - - # Removed pages - # GPT plugins were discontinued April 9th, 2024 - https://help.openai.com/en/articles/8988022-winding-down-the-chatgpt-plugins-beta - rewrite ^/platform/integrations/chatgpt-plugin$ https://blog.apify.com/add-custom-actions-to-your-gpts/ redirect; - # TypeScript course was removed from the Academy - https://github.com/apify/apify-docs/pull/1552 - rewrite ^/academy/switching-to-typescript(/.*)?$ https://apify.com/templates/categories/typescript permanent; - - # Python docs - - rewrite ^/api/client/python/docs$ /api/client/python/docs/overview/introduction permanent; - - # API docs reorganization - - # Actor Collection & Object to Actors - rewrite ^/api/v2/actors-actor-collection$ /api/v2/actors permanent; - rewrite ^/api/v2/actors-actor-object$ /api/v2/actors permanent; - - # Actor Version Collection & Object to Actors Actor Versions - rewrite ^/api/v2/actors-version-collection$ /api/v2/actors-actor-versions permanent; - rewrite ^/api/v2/actors-version-object$ /api/v2/actors-actor-versions permanent; - - # Actor Environment Variable Collection & Object to Actors Actor Versions - rewrite ^/api/v2/actors-environment-variable-collection$ /api/v2/actors-actor-versions permanent; - rewrite ^/api/v2/actors-environment-variable-object$ /api/v2/actors-actor-versions permanent; - - # Actor Build Collection, Object, Default Build, and Abort Build to Actors Actor Builds - rewrite ^/api/v2/actors-build-collection$ /api/v2/actors-actor-builds permanent; - rewrite ^/api/v2/actors-build-object$ /api/v2/actors-actor-builds permanent; - rewrite ^/api/v2/actors-default-build-object$ /api/v2/actors-actor-builds permanent; - rewrite ^/api/v2/actors-abort-build$ /api/v2/actors-actor-builds permanent; - - # Actor Run Collection, Object, Synchronous Runs, and Related Actions to Actors Actor Runs - rewrite ^/api/v2/actors-run-collection$ /api/v2/actors-actor-runs permanent; - rewrite ^/api/v2/actors-run-object$ /api/v2/actors-actor-runs permanent; - rewrite ^/api/v2/actors-run-actor-synchronously$ /api/v2/actors-actor-runs permanent; - rewrite ^/api/v2/actors-run-actor-synchronously-and-get-dataset-items$ /api/v2/actors-actor-runs permanent; - rewrite ^/api/v2/actors-abort-run$ /api/v2/actors-actor-runs permanent; - rewrite ^/api/v2/actors-metamorph-run$ /api/v2/actors-actor-runs permanent; - rewrite ^/api/v2/actors-resurrect-run$ /api/v2/actors-actor-runs permanent; - rewrite ^/api/v2/actors-last-run-object-and-its-storages$ /api/v2/actors-actor-runs permanent; - - # Actor Tasks Task Collection, Object, Input Object, Webhook, Run Collection, and Synchronous Actions to Actor Tasks - rewrite ^/api/v2/actor-tasks-task-collection$ /api/v2/actor-tasks permanent; - rewrite ^/api/v2/actor-tasks-task-object$ /api/v2/actor-tasks permanent; - rewrite ^/api/v2/actor-tasks-task-input-object$ /api/v2/actor-tasks permanent; - rewrite ^/api/v2/actor-tasks-webhook-collection$ /api/v2/actor-tasks permanent; - rewrite ^/api/v2/actor-tasks-run-collection$ /api/v2/actor-tasks permanent; - rewrite ^/api/v2/actor-tasks-run-task-synchronously$ /api/v2/actor-tasks permanent; - rewrite ^/api/v2/actor-tasks-run-task-synchronously-and-get-dataset-items$ /api/v2/actor-tasks permanent; - - # Datasets Dataset Collection, Dataset, Item Collection, and Statistics to Storage Datasets - rewrite ^/api/v2/datasets-dataset-collection$ /api/v2/storage-datasets permanent; - rewrite ^/api/v2/datasets-dataset$ /api/v2/storage-datasets permanent; - rewrite ^/api/v2/datasets-item-collection$ /api/v2/storage-datasets permanent; - rewrite ^/api/v2/datasets-statistics$ /api/v2/storage-datasets permanent; - - # Key-Value Stores Store Collection, Store Object, Key Collection, and Record to Storage Key-Value Stores - rewrite ^/api/v2/key-value-stores-store-collection$ /api/v2/storage-key-value-stores permanent; - rewrite ^/api/v2/key-value-stores-store-object$ /api/v2/storage-key-value-stores permanent; - rewrite ^/api/v2/key-value-stores-key-collection$ /api/v2/storage-key-value-stores permanent; - rewrite ^/api/v2/key-value-stores-record$ /api/v2/storage-key-value-stores permanent; - - # Request Queues Queue Collection, Queue, and Batch Request Operations to Storage Request Queues - rewrite ^/api/v2/request-queues-queue-collection$ /api/v2/storage-request-queues permanent; - rewrite ^/api/v2/request-queues-queue$ /api/v2/storage-request-queues permanent; - rewrite ^/api/v2/request-queues-batch-request-operations$ /api/v2/storage-request-queues permanent; - - # Request Queues Request Collection to Storage Request Queues Requests - rewrite ^/api/v2/request-queues-request-collection$ /api/v2/storage-request-queues-requests permanent; - - # Request Queues Queue Head, Queue Head With Locks, and Request Lock to Storage Request Queues Requests Locks - rewrite ^/api/v2/request-queues-queue-head$ /api/v2/storage-request-queues-requests-locks permanent; - rewrite ^/api/v2/request-queues-queue-head-with-locks$ /api/v2/storage-request-queues-requests-locks permanent; - rewrite ^/api/v2/request-queues-request-lock$ /api/v2/storage-request-queues-requests-locks permanent; - - # Webhooks Webhook Collection, Webhook Object, Webhook Test, and Dispatches Collection to Webhooks Webhooks - rewrite ^/api/v2/webhooks-webhook-collection$ /api/v2/webhooks-webhooks permanent; - rewrite ^/api/v2/webhooks-webhook-object$ /api/v2/webhooks-webhooks permanent; - rewrite ^/api/v2/webhooks-webhook-test$ /api/v2/webhooks-webhooks permanent; - rewrite ^/api/v2/webhooks-dispatches-collection$ /api/v2/webhooks-webhooks permanent; - - # Webhook Dispatches Collection and Dispatch Object to Webhooks Webhook Dispatches - rewrite ^/api/v2/webhook-dispatches-webhook-dispatches-collection$ /api/v2/webhooks-webhook-dispatches permanent; - rewrite ^/api/v2/webhook-dispatches-webhook-dispatch-object$ /api/v2/webhooks-webhook-dispatches permanent; - - # Schedules Collection, Schedule Object, and Schedule Log to Schedules - rewrite ^/api/v2/schedules-schedules-collection$ /api/v2/schedules permanent; - rewrite ^/api/v2/schedules-schedule-object$ /api/v2/schedules permanent; - rewrite ^/api/v2/schedules-schedule-log$ /api/v2/schedules permanent; - - # Store Store Actors Collection to Store - rewrite ^/api/v2/store-store-actors-collection$ /api/v2/store permanent; - - # Logs Log to Logs - rewrite ^/api/v2/logs-log$ /api/v2/logs permanent; - - # Users Public Data, Private Data, Monthly Usage, and Account and Usage Limits to Users - rewrite ^/api/v2/users-public-data$ /api/v2/users permanent; - rewrite ^/api/v2/users-private-data$ /api/v2/users permanent; - rewrite ^/api/v2/users-monthly-usage$ /api/v2/users permanent; - rewrite ^/api/v2/users-account-and-usage-limits$ /api/v2/users permanent; - - # api/v2-new to api/v2 - rewrite ^/api/v2-new(.*)$ /api/v2$1 permanent; - rewrite ^/api/v2-old(.*)$ /api/v2$1 permanent; - rewrite ^/api/v2-redoc(.*)$ /api/v2$1 permanent; - - # Actor marketing playbook addition - rewrite ^/academy/get-most-of-actors$ /academy/actor-marketing-playbook permanent; - - # Misc - rewrite ^/platform/integrations/llama$ /platform/integrations/llama-index permanent; + location /api/client/js { + proxy_pass https://apify.github.io/apify-client-js/; + } + location /api/client/python { + proxy_pass https://apify.github.io/apify-client-python/; + } + location /sdk/js { + proxy_pass https://apify.github.io/apify-sdk-js/; + } + location /sdk/python { + proxy_pass https://apify.github.io/apify-sdk-python/; + } + location /cli { + proxy_pass https://apify.github.io/apify-cli/; + } + location = /health { + access_log off; + add_header 'Content-Type' 'application/json'; + return 200 '{"status":"UP"}'; + } + # generated via `node tools/convert.mjs` inside the docs repository + rewrite ^/about$ /platform/about permanent; + rewrite ^/access-rights$ /platform/access-rights permanent; + rewrite ^/actor$ /platform/actors permanent; + rewrite ^/actors$ /platform/actors permanent; + rewrite ^/tutorials/integrations$ /platform/integrations permanent; + rewrite ^/integrations$ /platform/integrations permanent; + rewrite ^/monitoring$ /platform/monitoring permanent; + rewrite ^/proxy$ /platform/proxy permanent; + rewrite ^/robotic-process-automation$ /platform/robotic-process-automation permanent; + 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 ^/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; + rewrite ^/actors/development$ /platform/actors/development permanent; + rewrite ^/actor/examples$ /platform/actors/examples permanent; + rewrite ^/actors/examples$ /platform/actors/examples permanent; + rewrite ^/actor/limits$ /platform/actors/limits permanent; + rewrite ^/actors/limits$ /platform/actors/limits permanent; + rewrite ^/actors/paid-actors$ /platform/actors/paid-actors permanent; + rewrite ^/actors/publishing$ /platform/actors/publishing permanent; + rewrite ^/actor/run$ /platform/actors/running permanent; + rewrite ^/actor/running$ /platform/actors/running permanent; + rewrite ^/actors/run$ /platform/actors/running permanent; + rewrite ^/actors/running$ /platform/actors/running permanent; + rewrite ^/actor/security$ /platform/actors/security permanent; + rewrite ^/actors/security$ /platform/actors/security permanent; + rewrite ^/tasks$ /platform/actors/tasks permanent; + rewrite ^/actors/tasks$ /platform/actors/tasks permanent; + rewrite ^/integrations/slack$ /platform/integrations/slack permanent; + rewrite ^/webhooks$ /platform/integrations/webhooks permanent; + rewrite ^/integrations/webhooks$ /platform/integrations/webhooks permanent; + rewrite ^/monitoring/actor-or-task-run-failure$ /platform/monitoring/actor-or-task-run-failure permanent; + rewrite ^/monitoring/check-data-quality$ /platform/monitoring/check-data-quality permanent; + rewrite ^/monitoring/monitor-multiple-tasks$ /platform/monitoring/monitor-multiple-tasks permanent; + rewrite ^/monitoring/monitor-shared-datasets$ /platform/monitoring/monitor-shared-datasets permanent; + rewrite ^/robotic-process-automation/tips-and-tricks$ /platform/robotic-process-automation/tips-and-tricks permanent; + rewrite ^/proxy/connection-settings$ /platform/proxy/connection-settings permanent; + rewrite ^/proxy/datacenter-proxy$ /platform/proxy/datacenter-proxy permanent; + rewrite ^/proxy/google-serp-proxy$ /platform/proxy/google-serp-proxy permanent; + rewrite ^/proxy/residential-proxy/nodejs-examples$ /platform/proxy/residential-proxy permanent; + rewrite ^/proxy/residential-proxy/python-examples$ /platform/proxy/residential-proxy permanent; + rewrite ^/proxy/residential-proxy/php-examples$ /platform/proxy/residential-proxy permanent; + rewrite ^/proxy/residential-proxy$ /platform/proxy/residential-proxy permanent; + rewrite ^/proxy/troubleshooting$ /platform/proxy/troubleshooting permanent; + rewrite ^/web-scraping-101/anti-scraping-techniques$ /platform/web-scraping-101/anti-scraping-techniques permanent; + rewrite ^/web-scraping-101/web-scraping-techniques$ /platform/web-scraping-101/web-scraping-techniques permanent; + rewrite ^/storage/dataset$ /platform/storage/dataset permanent; + rewrite ^/storage/key-value-store$ /platform/storage/key-value-store permanent; + rewrite ^/storage/request-queue$ /platform/storage/request-queue permanent; + rewrite ^/access-rights/organization-account/how-to-use$ /platform/access-rights/organization-account/how-to-use permanent; + rewrite ^/access-rights/organization-account/setup$ /platform/access-rights/organization-account/setup permanent; + rewrite ^/tutorials/analyze-pages-and-fix-errors$ /platform/tutorials/analyze-pages-and-fix-errors permanent; + rewrite ^/scraping$ /platform/tutorials/apify-scrapers permanent; + rewrite ^/tutorials/apify-scrapers$ /platform/tutorials/apify-scrapers permanent; + rewrite ^/tutorials/building-public-actors$ /platform/tutorials/building-public-actors permanent; + rewrite ^/tutorials/improve-performance-by-caching-repeated-page-data$ /platform/tutorials/cache-data-to-improve-performance permanent; + rewrite ^/tutorials/cache-data-to-improve-performance$ /platform/tutorials/cache-data-to-improve-performance permanent; + rewrite ^/tutorials/crawl-a-list-of-urls-from-a-google-sheets-document$ /platform/tutorials/crawl-urls-from-a-google-sheet permanent; + rewrite ^/tutorials/crawl-urls-from-google-sheets-document$ /platform/tutorials/crawl-urls-from-a-google-sheet permanent; + rewrite ^/tutorials/crawl-urls-from-a-google-sheet$ /platform/tutorials/crawl-urls-from-a-google-sheet permanent; + rewrite ^/tutorials/log-in-by-transferring-cookies$ /platform/tutorials/log-in-by-transferring-cookies permanent; + rewrite ^/tutorials/log-into-a-website-using-puppeteer$ /platform/tutorials/log-into-a-website-using-puppeteer permanent; + rewrite ^/tutorials/process-data-using-python$ /platform/tutorials/process-data-using-python permanent; + rewrite ^/actor/quick-start$ /platform/tutorials/quick-start permanent; + rewrite ^/actors/quick-start$ /platform/tutorials/quick-start permanent; + rewrite ^/tutorials/quick-start$ /platform/tutorials/quick-start permanent; + rewrite ^/tutorials/integrations/run-actor-and-retrieve-data-via-api$ /platform/tutorials/run-actor-and-retrieve-data-via-api permanent; + rewrite ^/tutorials/run-actor-and-retrieve-data-via-api$ /platform/tutorials/run-actor-and-retrieve-data-via-api permanent; + rewrite ^/tutorials/scrape-data-using-python$ /platform/tutorials/scrape-data-using-python permanent; + rewrite ^/tutorials/scrape-websites-with-limited-pagination$ /platform/tutorials/scrape-paginated-sites permanent; + rewrite ^/tutorials/scrape-paginated-sites$ /platform/tutorials/scrape-paginated-sites permanent; + rewrite ^/tutorials/scrape-websites-using-the-sitemap$ /platform/tutorials/scrape-websites-using-the-sitemap permanent; + rewrite ^/tutorials/scraping-dynamic-content$ /platform/tutorials/scraping-dynamic-content permanent; + rewrite ^/tutorials/use-apify-from-php$ /platform/tutorials/use-apify-from-php permanent; + rewrite ^/actors/running/compute-units$ /platform/actors/running/compute-units permanent; + rewrite ^/actor/run$ /platform/actors/running/input permanent; + rewrite ^/actor/running/input-and-output$ /platform/actors/running/input permanent; + rewrite ^/actors/running/input-and-output$ /platform/actors/running/input permanent; + rewrite ^/actors/running/input$ /platform/actors/running/input permanent; + rewrite ^/actors/memory-and-cpu$ /platform/actors/running/memory-and-cpu permanent; + rewrite ^/actors/running/memory-and-cpu$ /platform/actors/running/memory-and-cpu permanent; + rewrite ^/actors/development/actor-config$ /platform/actors/development/actor-config permanent; + rewrite ^/actor/development/base-docker-images$ /platform/actors/development/base-docker-images permanent; + rewrite ^/actors/development/base-docker-images$ /platform/actors/development/base-docker-images permanent; + rewrite ^/actor/build$ /platform/actors/development/builds permanent; + rewrite ^/actor/development/build$ /platform/actors/development/builds permanent; + rewrite ^/actor/development/builds$ /platform/actors/development/builds permanent; + rewrite ^/actors/build$ /platform/actors/development/builds permanent; + rewrite ^/actors/development/builds$ /platform/actors/development/builds permanent; + rewrite ^/actors/development/continuous-integration$ /platform/actors/development/continuous-integration permanent; + rewrite ^/actor/development/environment-variables$ /platform/actors/development/environment-variables permanent; + rewrite ^/actors/development/environment-variables$ /platform/actors/development/environment-variables permanent; + rewrite ^/actor/input-schema$ /platform/actors/development/input-schema permanent; + rewrite ^/actor/development/input-schema$ /platform/actors/development/input-schema permanent; + rewrite ^/actors/input-schema$ /platform/actors/development/input-schema permanent; + rewrite ^/actors/development/input-schema$ /platform/actors/development/input-schema permanent; + rewrite ^/actors/development/output-schema$ /platform/actors/development/output-schema permanent; + rewrite ^/actors/development/secret-input$ /platform/actors/development/secret-input permanent; + rewrite ^/actor/source-code$ /platform/actors/development/source-code permanent; + rewrite ^/actors/source-code$ /platform/actors/development/source-code permanent; + rewrite ^/actor/development/source-code$ /platform/actors/development/source-code permanent; + rewrite ^/actors/development/source-code$ /platform/actors/development/source-code permanent; + rewrite ^/actor/development/state-persistence$ /platform/actors/development/state-persistence permanent; + rewrite ^/actors/development/state-persistence$ /platform/actors/development/state-persistence permanent; + rewrite ^/actors/development/testing-and-maintenance$ /platform/actors/development/testing-and-maintenance permanent; + rewrite ^/webhooks/actions$ /platform/integrations/webhooks/actions permanent; + rewrite ^/integrations/webhooks/actions$ /platform/integrations/webhooks/actions permanent; + rewrite ^/webhooks/ad-hoc-webhooks$ /platform/integrations/webhooks/ad-hoc-webhooks permanent; + rewrite ^/integrations/webhooks/ad-hoc-webhooks$ /platform/integrations/webhooks/ad-hoc-webhooks permanent; + rewrite ^/webhooks/events$ /platform/integrations/webhooks/events permanent; + rewrite ^/integrations/webhooks/events$ /platform/integrations/webhooks/events permanent; + rewrite ^/proxy/datacenter-proxy/nodejs-examples$ /platform/proxy/datacenter-proxy/examples permanent; + rewrite ^/proxy/datacenter-proxy/python-examples$ /platform/proxy/datacenter-proxy/examples permanent; + rewrite ^/proxy/datacenter-proxy/php-examples$ /platform/proxy/datacenter-proxy/examples permanent; + rewrite ^/proxy/datacenter-proxy/examples$ /platform/proxy/datacenter-proxy/examples permanent; + rewrite ^/proxy/google-serp-proxy/nodejs-examples$ /platform/proxy/google-serp-proxy/examples permanent; + rewrite ^/proxy/google-serp-proxy/python-examples$ /platform/proxy/google-serp-proxy/examples permanent; + rewrite ^/proxy/google-serp-proxy/php-examples$ /platform/proxy/google-serp-proxy/examples permanent; + 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 ^/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; + rewrite ^/academy/apify-platform/getting-started$ /academy/getting-started permanent; + rewrite ^/academy/apify-platform/running-a-web-server$ /academy/running-a-web-server permanent; + rewrite ^/academy/apify-platform/deploying-your-code/deploying$ /academy/deploying-your-code/deploying permanent; + rewrite ^/academy/apify-platform/deploying-your-code/docker-file$ /academy/deploying-your-code/docker-file permanent; + rewrite ^/academy/apify-platform/deploying-your-code/input-schema$ /academy/deploying-your-code/input-schema permanent; + rewrite ^/academy/apify-platform/deploying-your-code/inputs-outputs$ /academy/deploying-your-code/inputs-outputs permanent; + rewrite ^/academy/apify-platform/get-most-of-actors/actor-readme$ /academy/get-most-of-actors/actor-readme permanent; + rewrite ^/academy/apify-platform/get-most-of-actors/monetizing-your-actor$ /academy/get-most-of-actors/monetizing-your-actor permanent; + rewrite ^/academy/apify-platform/get-most-of-actors/naming-your-actor$ /academy/get-most-of-actors/naming-your-actor permanent; + rewrite ^/academy/apify-platform/get-most-of-actors/seo-and-promotion$ /academy/get-most-of-actors/seo-and-promotion permanent; + rewrite ^/academy/apify-platform/getting-started/actors$ /academy/getting-started/actors permanent; + rewrite ^/academy/apify-platform/getting-started/apify-api$ /academy/getting-started/apify-api permanent; + rewrite ^/academy/apify-platform/getting-started/apify-client$ /academy/getting-started/apify-client permanent; + rewrite ^/academy/apify-platform/getting-started/creating-actors$ /academy/getting-started/creating-actors permanent; + rewrite ^/academy/apify-platform/getting-started/inputs-outputs$ /academy/getting-started/inputs-outputs permanent; + rewrite ^/academy/web-scraping-for-beginners/data-collection$ /academy/web-scraping-for-beginners/data-extraction permanent; + rewrite ^/academy/puppeteer-playwright/executing-scripts/extracting-data$ /academy/puppeteer-playwright/executing-scripts/collecting-data permanent; + rewrite ^/academy/web-scraping-for-beginners/data-collection/browser-devtools$ /academy/web-scraping-for-beginners/data-extraction/browser-devtools permanent; + rewrite ^/academy/web-scraping-for-beginners/data-collection/computer-preparation$ /academy/web-scraping-for-beginners/data-extraction/computer-preparation permanent; + rewrite ^/academy/web-scraping-for-beginners/data-collection/devtools-continued$ /academy/web-scraping-for-beginners/data-extraction/devtools-continued permanent; + rewrite ^/academy/web-scraping-for-beginners/data-collection/node-continued$ /academy/web-scraping-for-beginners/data-extraction/node-continued permanent; + rewrite ^/academy/web-scraping-for-beginners/data-collection/node-js-scraper$ /academy/web-scraping-for-beginners/data-extraction/node-js-scraper permanent; + rewrite ^/academy/web-scraping-for-beginners/data-collection/project-setup$ /academy/web-scraping-for-beginners/data-extraction/project-setup permanent; + rewrite ^/academy/web-scraping-for-beginners/data-collection/save-to-csv$ /academy/web-scraping-for-beginners/data-extraction/save-to-csv permanent; + rewrite ^/academy/web-scraping-for-beginners/data-collection/using-devtools$ /academy/web-scraping-for-beginners/data-extraction/using-devtools permanent; + rewrite ^/academy/web-scraping-for-beginners/crawling/processing-data$ /academy/web-scraping-for-beginners/crawling/exporting-data permanent; + rewrite ^/academy/web-scraping-for-beginners/crawling/recap-collection-basics$ /academy/web-scraping-for-beginners/crawling/recap-extraction-basics permanent; + rewrite ^/academy/php/using-apify-scraper-with-php$ /academy/php/use-apify-from-php permanent; + rewrite ^/api/client/?$ /api redirect; + + # unified api clients docs pages -> getting started page + rewrite ^/api/client/python/docs/quick-start$ /api/client/python/docs permanent; + rewrite ^/api/client/python/docs/features$ /api/client/python/docs permanent; + rewrite ^/api/client/python/docs/usage-concepts$ /api/client/python/docs permanent; + + rewrite ^/api/client/js/docs/quick-start$ /api/client/js/docs permanent; + rewrite ^/api/client/js/docs/features$ /api/client/js/docs permanent; + rewrite ^/api/client/js/docs/usage-concepts$ /api/client/js/docs permanent; + + # sdk/js/api -> sdk/js/reference + rewrite ^/sdk/js/api/apify(.*)$ /sdk/js/reference$1 permanent; + rewrite ^/sdk/js/api(.*)$ /sdk/js/reference$1 permanent; + rewrite ^/sdk/js/reference/apify(.*)$ /sdk/js/reference$1 redirect; + rewrite ^/sdk/js/reference/next/apify(.*)$ /sdk/js/reference/next$1 redirect; + rewrite ^/sdk/js/docs$ /sdk/js/docs/guides/apify-platform$1 redirect; + rewrite ^/sdk/js/docs/next$ /sdk/js/docs/next/guides/apify-platform$1 redirect; + rewrite ^/sdk/js/docs/guides/getting-started$ /sdk/js/docs/next/guides/apify-platform$1 redirect; + rewrite ^/sdk/js/docs/next/guides/getting-started$ /sdk/js/docs/next/guides/apify-platform$1 redirect; + + # old sdk version redirects (we keep only latest, and version only major/minor) + rewrite ^/sdk/js/docs/1\.\d+\.\d+(.*)$ /sdk/js/docs/1.3$1 redirect; + rewrite ^/sdk/js/docs/2\.\d+\.\d+(.*)$ /sdk/js/docs/2.3$1 redirect; + rewrite ^/sdk/js/docs/api(.*)$ /sdk/js/docs/2.3/api$1 redirect; + 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; + + # add trailing slashes to the root of GH pages docs + rewrite ^/api/client/js$ /api/client/js/ redirect; + rewrite ^/api/client/python$ /api/client/python/ redirect; + rewrite ^/sdk/js$ /sdk/js/ redirect; + rewrite ^/sdk/python$ /sdk/python/ redirect; + rewrite ^/cli$ /cli/ redirect; + + # versions page redirects + rewrite ^/versions/?$ / permanent; # no docs-wide changelog, redirect to the root + rewrite ^/cli/versions/?$ /cli/docs/changelog permanent; + rewrite ^/sdk/js/versions/?$ /sdk/js/docs/changelog permanent; + rewrite ^/api/client/js/versions/?$ /api/client/js/docs/changelog permanent; + + # legacy links in some Actor READMEs + rewrite ^/scraping/tutorial/introduction$ /academy/apify-scrapers/getting-started permanent; + rewrite ^/scraping/tutorial/web-scraper$ /academy/apify-scrapers/web-scraper permanent; + + # 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/anti-scraping-techniques$ /academy/anti-scraping/techniques redirect; + rewrite ^/platform/web-scraping-101/web-scraping-techniques$ /academy/concepts redirect; + # RPA + rewrite ^/platform/robotic-process-automation$ /academy/concepts/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; + rewrite ^/platform/tutorials/log-into-a-website-using-puppeteer$ /academy/puppeteer-playwright/common-use-cases/logging-into-a-website redirect; + rewrite ^/platform/tutorials/cache-data-to-improve-performance$ /academy/expert-scraping-with-apify/saving-useful-stats redirect; + rewrite ^/platform/tutorials/scrape-websites-using-the-sitemap$ /academy/tutorials/scraping-with-sitemaps redirect; + rewrite ^/platform/tutorials/analyze-pages-and-fix-errors$ /academy/analyzing-pages-and-fixing-errors redirect; + rewrite ^/platform/tutorials/crawl-urls-from-a-google-sheet$ /academy/node-js/scraping-urls-list-from-google-sheets redirect; + rewrite ^/platform/tutorials/log-in-by-transferring-cookies$ /academy/tools/edit-this-cookie redirect; + rewrite ^/platform/tutorials/scrape-data-using-python$ /academy/python/scrape-data-python redirect; + rewrite ^/platform/tutorials/process-data-using-python$ /academy/python/process-data-using-python redirect; + rewrite ^/platform/tutorials/use-apify-from-php$ /academy/php/using-apify-scraper-with-php redirect; + rewrite ^/platform/tutorials/scrape-paginated-sites$ /academy/advanced-web-scraping/scraping-paginated-sites redirect; + rewrite ^/platform/tutorials/apify-scrapers$ /academy/apify-scrapers redirect; + rewrite ^/platform/tutorials/apify-scrapers/getting-started$ /academy/apify-scrapers/getting-started redirect; + rewrite ^/platform/tutorials/apify-scrapers/web-scraper$ /academy/apify-scrapers/web-scraper redirect; + rewrite ^/platform/tutorials/apify-scrapers/cheerio-scraper$ /academy/apify-scrapers/cheerio-scraper redirect; + rewrite ^/platform/tutorials/apify-scrapers/puppeteer-scraper$ /academy/apify-scrapers/puppeteer-scraper redirect; + rewrite ^/platform/tutorials/run-actor-and-retrieve-data-via-api$ /academy/api/run-actor-and-retrieve-data-via-api redirect; + + # Reorganization of docs: Basic + rewrite ^/platform/tutorials/building-public-actors$ /platform/actors/publishing redirect; + rewrite ^/platform/actors/paid-actors$ /platform/actors/running/actors-in-store#paid-actors redirect; + rewrite ^/platform/actors/tasks$ /platform/actors/running/tasks redirect; + rewrite ^/platform/actors/running/compute-units$ /platform/actors/running/usage-and-resources#what-is-a-compute-unit-cu redirect; + rewrite ^/platform/actors/running/memory-and-cpu$ /platform/actors/running/usage-and-resources#memory redirect; + rewrite ^/platform/actors/running/input$ /platform/actors/running/input-and-output#input redirect; + rewrite ^/platform/actors/security$ /platform/security redirect; + rewrite ^/platform/actors/limits$ /platform/limits redirect; + + # Reorganization of docs: Home + rewrite ^/platform/about$ /platform redirect; + rewrite ^/platform/tutorials/quick-start$ /platform/actors/running redirect; + rewrite ^/platform/tutorials$ /platform/actors/running redirect; + + # Reorganization of docs: Access rights + rewrite ^/platform/access-rights$ /platform/collaboration/access-rights redirect; + rewrite ^/platform/access-rights/organization-account$ /platform/collaboration/organization-account redirect; + rewrite ^/platform/access-rights/organization-account/setup$ /platform/collaboration/organization-account/setup redirect; + rewrite ^/platform/access-rights/organization-account/how-to-use$ /platform/collaboration/organization-account/how-to-use redirect; + rewrite ^/platform/access-rights/list-of-permissions$ /platform/collaboration/list-of-permissions redirect; + + # Reorganization of development section + rewrite ^/platform/actors/development/actor-config$ /platform/actors/development/actor-definition/actor-json redirect; + rewrite ^/platform/actors/development/base-docker-images$ /platform/actors/development/actor-definition/dockerfile redirect; + rewrite ^/platform/actors/development/secret-input$ /platform/actors/development/actor-definition/input-schema/secret-input redirect; + rewrite ^/platform/actors/development/input-schema$ /platform/actors/development/actor-definition/input-schema/specification/v1 redirect; + rewrite ^/platform/actors/development/output-schema$ /platform/actors/development/actor-definition/output-schema redirect; + rewrite ^/platform/actors/development/container-web-server$ /platform/actors/development/programming-interface/container-web-server redirect; + rewrite ^/platform/actors/development/environment-variables$ /platform/actors/development/programming-interface/environment-variables redirect; + rewrite ^/platform/actors/development/builds$ /platform/actors/development/builds-and-runs/builds redirect; + rewrite ^/platform/actors/development/state-persistence$ /platform/actors/development/builds-and-runs/state-persistence redirect; + rewrite ^/platform/actors/development/continuous-integration$ /platform/actors/development/deployment/continuous-integration redirect; + rewrite ^/platform/actors/development/testing-and-maintenance$ /platform/actors/development/deployment/automated-tests redirect; + rewrite ^/platform/actors/development/source-code$ /platform/actors/development/deployment/source-types redirect; + + # Rename output schema to dataset schema + rewrite ^/platform/actors/development/actor-definition/output-schema$ /platform/actors/development/actor-definition/dataset-schema permanent; + rewrite ^academy/deploying-your-code/output-schema$ /academy/deploying-your-code/dataset-schema permanent; + + # Academy restructuring + rewrite ^academy/advanced-web-scraping/scraping-paginated-sites$ /academy/advanced-web-scraping/crawling/crawling-with-search permanent; + rewrite ^academy/php$ /academy/php/use-apify-from-php redirect; # not permanent in case we want to reuse /php in the future + + # Removed pages + # GPT plugins were discontinued April 9th, 2024 - https://help.openai.com/en/articles/8988022-winding-down-the-chatgpt-plugins-beta + rewrite ^/platform/integrations/chatgpt-plugin$ https://blog.apify.com/add-custom-actions-to-your-gpts/ redirect; + # TypeScript course was removed from the Academy - https://github.com/apify/apify-docs/pull/1552 + rewrite ^/academy/switching-to-typescript(/.*)?$ https://apify.com/templates/categories/typescript permanent; + + # Python docs + + rewrite ^/api/client/python/docs$ /api/client/python/docs/overview/introduction permanent; + + # API docs reorganization + + # Actor Collection & Object to Actors + rewrite ^/api/v2/actors-actor-collection$ /api/v2/actors permanent; + rewrite ^/api/v2/actors-actor-object$ /api/v2/actors permanent; + + # Actor Version Collection & Object to Actors Actor Versions + rewrite ^/api/v2/actors-version-collection$ /api/v2/actors-actor-versions permanent; + rewrite ^/api/v2/actors-version-object$ /api/v2/actors-actor-versions permanent; + + # Actor Environment Variable Collection & Object to Actors Actor Versions + rewrite ^/api/v2/actors-environment-variable-collection$ /api/v2/actors-actor-versions permanent; + rewrite ^/api/v2/actors-environment-variable-object$ /api/v2/actors-actor-versions permanent; + + # Actor Build Collection, Object, Default Build, and Abort Build to Actors Actor Builds + rewrite ^/api/v2/actors-build-collection$ /api/v2/actors-actor-builds permanent; + rewrite ^/api/v2/actors-build-object$ /api/v2/actors-actor-builds permanent; + rewrite ^/api/v2/actors-default-build-object$ /api/v2/actors-actor-builds permanent; + rewrite ^/api/v2/actors-abort-build$ /api/v2/actors-actor-builds permanent; + + # Actor Run Collection, Object, Synchronous Runs, and Related Actions to Actors Actor Runs + rewrite ^/api/v2/actors-run-collection$ /api/v2/actors-actor-runs permanent; + rewrite ^/api/v2/actors-run-object$ /api/v2/actors-actor-runs permanent; + rewrite ^/api/v2/actors-run-actor-synchronously$ /api/v2/actors-actor-runs permanent; + rewrite ^/api/v2/actors-run-actor-synchronously-and-get-dataset-items$ /api/v2/actors-actor-runs permanent; + rewrite ^/api/v2/actors-abort-run$ /api/v2/actors-actor-runs permanent; + rewrite ^/api/v2/actors-metamorph-run$ /api/v2/actors-actor-runs permanent; + rewrite ^/api/v2/actors-resurrect-run$ /api/v2/actors-actor-runs permanent; + rewrite ^/api/v2/actors-last-run-object-and-its-storages$ /api/v2/actors-actor-runs permanent; + + # Actor Tasks Task Collection, Object, Input Object, Webhook, Run Collection, and Synchronous Actions to Actor Tasks + rewrite ^/api/v2/actor-tasks-task-collection$ /api/v2/actor-tasks permanent; + rewrite ^/api/v2/actor-tasks-task-object$ /api/v2/actor-tasks permanent; + rewrite ^/api/v2/actor-tasks-task-input-object$ /api/v2/actor-tasks permanent; + rewrite ^/api/v2/actor-tasks-webhook-collection$ /api/v2/actor-tasks permanent; + rewrite ^/api/v2/actor-tasks-run-collection$ /api/v2/actor-tasks permanent; + rewrite ^/api/v2/actor-tasks-run-task-synchronously$ /api/v2/actor-tasks permanent; + rewrite ^/api/v2/actor-tasks-run-task-synchronously-and-get-dataset-items$ /api/v2/actor-tasks permanent; + + # Datasets Dataset Collection, Dataset, Item Collection, and Statistics to Storage Datasets + rewrite ^/api/v2/datasets-dataset-collection$ /api/v2/storage-datasets permanent; + rewrite ^/api/v2/datasets-dataset$ /api/v2/storage-datasets permanent; + rewrite ^/api/v2/datasets-item-collection$ /api/v2/storage-datasets permanent; + rewrite ^/api/v2/datasets-statistics$ /api/v2/storage-datasets permanent; + + # Key-Value Stores Store Collection, Store Object, Key Collection, and Record to Storage Key-Value Stores + rewrite ^/api/v2/key-value-stores-store-collection$ /api/v2/storage-key-value-stores permanent; + rewrite ^/api/v2/key-value-stores-store-object$ /api/v2/storage-key-value-stores permanent; + rewrite ^/api/v2/key-value-stores-key-collection$ /api/v2/storage-key-value-stores permanent; + rewrite ^/api/v2/key-value-stores-record$ /api/v2/storage-key-value-stores permanent; + + # Request Queues Queue Collection, Queue, and Batch Request Operations to Storage Request Queues + rewrite ^/api/v2/request-queues-queue-collection$ /api/v2/storage-request-queues permanent; + rewrite ^/api/v2/request-queues-queue$ /api/v2/storage-request-queues permanent; + rewrite ^/api/v2/request-queues-batch-request-operations$ /api/v2/storage-request-queues permanent; + + # Request Queues Request Collection to Storage Request Queues Requests + rewrite ^/api/v2/request-queues-request-collection$ /api/v2/storage-request-queues-requests permanent; + + # Request Queues Queue Head, Queue Head With Locks, and Request Lock to Storage Request Queues Requests Locks + rewrite ^/api/v2/request-queues-queue-head$ /api/v2/storage-request-queues-requests-locks permanent; + rewrite ^/api/v2/request-queues-queue-head-with-locks$ /api/v2/storage-request-queues-requests-locks permanent; + rewrite ^/api/v2/request-queues-request-lock$ /api/v2/storage-request-queues-requests-locks permanent; + + # Webhooks Webhook Collection, Webhook Object, Webhook Test, and Dispatches Collection to Webhooks Webhooks + rewrite ^/api/v2/webhooks-webhook-collection$ /api/v2/webhooks-webhooks permanent; + rewrite ^/api/v2/webhooks-webhook-object$ /api/v2/webhooks-webhooks permanent; + rewrite ^/api/v2/webhooks-webhook-test$ /api/v2/webhooks-webhooks permanent; + rewrite ^/api/v2/webhooks-dispatches-collection$ /api/v2/webhooks-webhooks permanent; + + # Webhook Dispatches Collection and Dispatch Object to Webhooks Webhook Dispatches + rewrite ^/api/v2/webhook-dispatches-webhook-dispatches-collection$ /api/v2/webhooks-webhook-dispatches permanent; + rewrite ^/api/v2/webhook-dispatches-webhook-dispatch-object$ /api/v2/webhooks-webhook-dispatches permanent; + + # Schedules Collection, Schedule Object, and Schedule Log to Schedules + rewrite ^/api/v2/schedules-schedules-collection$ /api/v2/schedules permanent; + rewrite ^/api/v2/schedules-schedule-object$ /api/v2/schedules permanent; + rewrite ^/api/v2/schedules-schedule-log$ /api/v2/schedules permanent; + + # Store Store Actors Collection to Store + rewrite ^/api/v2/store-store-actors-collection$ /api/v2/store permanent; + + # Logs Log to Logs + rewrite ^/api/v2/logs-log$ /api/v2/logs permanent; + + # Users Public Data, Private Data, Monthly Usage, and Account and Usage Limits to Users + rewrite ^/api/v2/users-public-data$ /api/v2/users permanent; + rewrite ^/api/v2/users-private-data$ /api/v2/users permanent; + rewrite ^/api/v2/users-monthly-usage$ /api/v2/users permanent; + rewrite ^/api/v2/users-account-and-usage-limits$ /api/v2/users permanent; + + # api/v2-new to api/v2 + rewrite ^/api/v2-new(.*)$ /api/v2$1 permanent; + rewrite ^/api/v2-old(.*)$ /api/v2$1 permanent; + rewrite ^/api/v2-redoc(.*)$ /api/v2$1 permanent; + + # Actor marketing playbook addition + rewrite ^/academy/get-most-of-actors$ /academy/actor-marketing-playbook permanent; + + # Misc + rewrite ^/platform/integrations/llama$ /platform/integrations/llama-index permanent; } # Temporarily used to route crawlee.dev to the Crawlee GitHub pages. # TODO: create a separate nginx deployment for Crawlee and move this there. server { - listen 0.0.0.0:8080; - server_name 'crawlee.dev'; - location / { - proxy_pass https://apify.github.io/crawlee/; - } - location /python { - proxy_pass https://apify.github.io/crawlee-python/; - } - - # So that we can have both GH pages and crawlee.dev/python working and loading assets from the same path - location /crawlee-python { - proxy_pass https://apify.github.io/crawlee-python/; - } - - # Redirect rule for old JS docs to go under /js prefix - rewrite ^/docs(.*)$ /js/docs$1 permanent; - rewrite ^/api(.*)$ /js/api$1 permanent; - - # Remove version numbers from /js/api/3.[0-9]/* and /js/docs/3.[0-9]/* - rewrite ^/js/api/3\.\d(/.*)?$ /js/api$1 permanent; - rewrite ^/js/docs/3\.\d(/.*)?$ /js/docs$1 permanent; - - # Redirect rule for "upgrading-to-v03" to "upgrading-to-v0x" - rewrite ^/python/docs/upgrading/upgrading-to-v03$ /python/docs/upgrading/upgrading-to-v0x permanent; - - # Redirect rule so that /python/docs actually leads somewhere - rewrite ^/python/docs/?$ /python/docs/quick-start; - - rewrite ^/versions/?$ /js/api/core/changelog permanent; + listen 0.0.0.0:8080; + server_name 'crawlee.dev'; + location / { + proxy_pass https://apify.github.io/crawlee/; + } + location /python { + proxy_pass https://apify.github.io/crawlee-python/; + } + + # So that we can have both GH pages and crawlee.dev/python working and loading assets from the same path + location /crawlee-python { + proxy_pass https://apify.github.io/crawlee-python/; + } + + # Redirect rule for old JS docs to go under /js prefix + rewrite ^/docs(.*)$ /js/docs$1 permanent; + rewrite ^/api(.*)$ /js/api$1 permanent; + + # Remove version numbers from /js/api/3.[0-9]/* and /js/docs/3.[0-9]/* + rewrite ^/js/api/3\.\d(/.*)?$ /js/api$1 permanent; + rewrite ^/js/docs/3\.\d(/.*)?$ /js/docs$1 permanent; + + # Redirect rule for "upgrading-to-v03" to "upgrading-to-v0x" + rewrite ^/python/docs/upgrading/upgrading-to-v03$ /python/docs/upgrading/upgrading-to-v0x permanent; + + # Redirect rule so that /python/docs actually leads somewhere + rewrite ^/python/docs/?$ /python/docs/quick-start; + + rewrite ^/versions/?$ /js/api/core/changelog permanent; } server {