2 |
--------------------------------------------------------------------------------
/test/hsts.mjs:
--------------------------------------------------------------------------------
1 | import assert from 'assert';
2 |
3 | const HOSTNAMES = [
4 | // not an exhaustive list, just enough to catch accidental removal
5 | 'whatwg.org',
6 | 'blog.whatwg.org',
7 | 'dom.spec.whatwg.org',
8 | 'participate.whatwg.org',
9 | 'resources.whatwg.org',
10 | 'spec.whatwg.org',
11 | 'wiki.whatwg.org',
12 | ];
13 |
14 | describe('strict-transport-security header', function() {
15 | for (const hostname of HOSTNAMES) {
16 | specify(hostname, async function() {
17 | // redirecting is a failure since we might then test the wrong server
18 | const response = await fetch(`https://${hostname}/`, { redirect: 'manual' });
19 | assert.strictEqual(response.status, 200);
20 | let value = response.headers.get('strict-transport-security');
21 | assert.strictEqual(value, 'max-age=63072000; includeSubDomains; preload');
22 | });
23 | }
24 | });
25 |
--------------------------------------------------------------------------------
/debian/marquee/nginx/sites/forums.whatwg.org.conf:
--------------------------------------------------------------------------------
1 | server {
2 | server_name forums.whatwg.org;
3 | root /var/www/forums.whatwg.org;
4 |
5 | include /etc/nginx/whatwg.conf;
6 |
7 | location / {
8 | index index.php;
9 | }
10 |
11 | location = / {
12 | return 301 /bb3/;
13 | }
14 |
15 | location ~ \.php {
16 | default_type text/html;
17 |
18 | # Strip &sid=... from the query string if present.
19 | if ($args ~ ^(.*?)&?sid=[a-z0-9]*$) {
20 | set $stripped $1$2;
21 | rewrite ^(.*)$ $1?$stripped? permanent;
22 | }
23 |
24 | # For requests with a query component, first look for a file with the
25 | # query string appended, then without. For viewtopic.php?p=120, look for
26 | # viewtopic.php__p=120, then viewtopic.php. __ is used because question
27 | # marks aren't allowed in filenames on Windows.
28 | try_files "${uri}__${args}" $uri =404;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/test/wiki.mjs:
--------------------------------------------------------------------------------
1 | import assert from 'assert';
2 |
3 | describe('wiki', function() {
4 | specify('main page', async function() {
5 | const response = await fetch('https://wiki.whatwg.org/wiki/Main_Page');
6 | assert.strictEqual(response.status, 200);
7 | const text = await response.text();
8 | // the main page should link to the FAQ
9 | assert(text.includes('https://whatwg.org/faq'));
10 | assert(!text.includes('This site is experiencing technical difficulties'));
11 | });
12 |
13 | specify('history', async function() {
14 | const response = await fetch('https://wiki.whatwg.org/index.php?title=IRC&action=history');
15 | assert.strictEqual(response.status, 200);
16 | const text = await response.text();
17 | // history pages should have a certain title and buttons
18 | assert(text.includes('IRC: Revision history'));
19 | assert(text.includes('value="Compare selected revisions"'));
20 | assert(!text.includes('This site is experiencing technical difficulties'));
21 | });
22 | });
23 |
--------------------------------------------------------------------------------
/test/x-headers.mjs:
--------------------------------------------------------------------------------
1 | import assert from 'assert';
2 |
3 | const TEST_DATA = [
4 | // not an exhaustive list, just enough to catch accidental removal
5 | ['whatwg.org', 'nosniff', null],
6 | ['blog.whatwg.org', 'nosniff', 'sameorigin'],
7 | ['dom.spec.whatwg.org', 'nosniff', null],
8 | ['participate.whatwg.org', 'nosniff', 'deny'],
9 | ['resources.whatwg.org', 'nosniff', null],
10 | ['spec.whatwg.org', 'nosniff', null],
11 | ['wiki.whatwg.org', 'nosniff', 'sameorigin'],
12 | ];
13 |
14 | describe('x-* headers', function() {
15 | for (const [hostname, cto, xfo] of TEST_DATA) {
16 | specify(hostname, async function() {
17 | // redirecting is a failure since we might then test the wrong server
18 | const response = await fetch(`https://${hostname}/`, { redirect: 'manual' });
19 | assert.strictEqual(response.status, 200);
20 | assert.strictEqual(response.headers.get('x-content-type-options'), cto);
21 | assert.strictEqual(response.headers.get('x-frame-options'), xfo);
22 | // Expect no x-xss-protection header
23 | assert.strictEqual(response.headers.get('x-xss-protection'), null);
24 | });
25 | }
26 | });
27 |
--------------------------------------------------------------------------------
/html5.org/tools/icons/conformance-checkers:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/test/cors.mjs:
--------------------------------------------------------------------------------
1 | import assert from 'assert';
2 |
3 | const CORS_TESTS = [
4 | // not an exhaustive list of domains, just enough to catch accidental removal
5 | 'https://dom.spec.whatwg.org/',
6 | 'https://html.spec.whatwg.org/',
7 | 'https://resources.whatwg.org/',
8 | 'https://whatwg.org/',
9 | ];
10 |
11 | const NO_CORS_TESTS = [
12 | // domains for which it's probably a mistake to have CORS headers
13 | 'https://blog.whatwg.org/',
14 | 'https://participate.whatwg.org/',
15 | 'https://wiki.whatwg.org/',
16 | ];
17 |
18 | function test(url, expected) {
19 | specify(url, async function() {
20 | // redirecting is a failure since we might then test the wrong server
21 | const response = await fetch(url, { redirect: 'manual' });
22 | assert.strictEqual(response.status, 200);
23 | assert.strictEqual(response.headers.get('access-control-allow-origin'), expected);
24 | });
25 | }
26 |
27 | describe('access-control-allow-origin header', function() {
28 | describe('URLs with header', function() {
29 | for (const url of CORS_TESTS) {
30 | test(url, '*');
31 | }
32 | });
33 | describe('URLs without header', function() {
34 | for (const url of NO_CORS_TESTS) {
35 | test(url, null);
36 | }
37 | });
38 | });
39 |
--------------------------------------------------------------------------------
/digitalocean/blog.yaml:
--------------------------------------------------------------------------------
1 | # https://www.digitalocean.com/docs/app-platform/references/app-specification-reference/
2 | domains:
3 | - domain: blog.whatwg.org
4 | type: PRIMARY
5 | zone: whatwg.org
6 | name: blog
7 | region: nyc
8 | services:
9 | - dockerfile_path: Dockerfile
10 | envs:
11 | - key: WORDPRESS_DB_HOST
12 | scope: RUN_TIME
13 | value: ${whatwg-db.HOSTNAME}:${whatwg-db.PORT}
14 | - key: WORDPRESS_DB_NAME
15 | scope: RUN_TIME
16 | value: ${whatwg-db.DATABASE}
17 | - key: WORDPRESS_DB_USER
18 | scope: RUN_TIME
19 | value: ${whatwg-db.USERNAME}
20 | - key: WORDPRESS_DB_PASSWORD
21 | scope: RUN_TIME
22 | value: ${whatwg-db.PASSWORD}
23 | - key: WORDPRESS_EXTRA_CONFIG
24 | scope: RUN_TIME
25 | value: |
26 | define('DB_CHARSET', 'utf8mb4');
27 | github:
28 | branch: main
29 | deploy_on_push: true
30 | repo: whatwg/blog.whatwg.org
31 | health_check:
32 | http_path: /feed-autodiscovery
33 | http_port: 80
34 | instance_count: 1
35 | instance_size_slug: basic-xs
36 | name: blog
37 | routes:
38 | - path: /
39 | databases:
40 | - cluster_name: whatwg-db
41 | db_name: whatblogdb
42 | db_user: whatbloguser
43 | engine: MYSQL
44 | name: whatwg-db
45 | production: true
46 | version: "8"
47 |
--------------------------------------------------------------------------------
/debian/marquee/DOMAINS:
--------------------------------------------------------------------------------
1 | whatwg.org
2 | books.idea.whatwg.org
3 | books.spec.whatwg.org
4 | c.whatwg.org
5 | compat.spec.whatwg.org
6 | compression.spec.whatwg.org
7 | console.spec.whatwg.org
8 | cookiestore.spec.whatwg.org
9 | developer.whatwg.org
10 | developers.whatwg.org
11 | dom.spec.whatwg.org
12 | domparsing.spec.whatwg.org
13 | encoding.spec.whatwg.org
14 | fetch.spec.whatwg.org
15 | figures.idea.whatwg.org
16 | figures.spec.whatwg.org
17 | forums.whatwg.org
18 | fs.spec.whatwg.org
19 | fullscreen.spec.whatwg.org
20 | help.whatwg.org
21 | html-differences.whatwg.org
22 | html.spec.whatwg.org
23 | idea.whatwg.org
24 | images.whatwg.org
25 | infra.spec.whatwg.org
26 | javascript.spec.whatwg.org
27 | lists.whatwg.org
28 | mediasession.spec.whatwg.org
29 | mimesniff.spec.whatwg.org
30 | n.whatwg.org
31 | notifications.spec.whatwg.org
32 | quirks.spec.whatwg.org
33 | resources.whatwg.org
34 | spec.whatwg.org
35 | specs.whatwg.org
36 | storage.spec.whatwg.org
37 | streams.spec.whatwg.org
38 | svn.whatwg.org
39 | testutils.spec.whatwg.org
40 | url.spec.whatwg.org
41 | urlpattern.spec.whatwg.org
42 | validator.whatwg.org
43 | webidl.spec.whatwg.org
44 | websockets.spec.whatwg.org
45 | websocket.spec.whatwg.org
46 | webvtt.spec.whatwg.org
47 | www.whatwg.org
48 | xhr.spec.whatwg.org
49 | xn--7ca.whatwg.org
50 |
--------------------------------------------------------------------------------
/html5.org/index.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | html5.org — HTML revisited
6 |
14 |
15 |
16 | html5.org
17 | HTML5 is the latest version of HTML and XHTML. The
18 | HTML Standard defines a
19 | single language that can be written in HTML and XML. It attempts to
20 | solve issues found in previous iterations of HTML and addresses the
21 | needs of Web Applications, an area previously not adequately covered by
22 | HTML.
23 | Here are several resources worth exploring:
24 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/digitalocean/wiki.yaml:
--------------------------------------------------------------------------------
1 | # https://www.digitalocean.com/docs/app-platform/references/app-specification-reference/
2 | domains:
3 | - domain: wiki.whatwg.org
4 | type: PRIMARY
5 | zone: whatwg.org
6 | name: wiki
7 | region: nyc
8 | services:
9 | - dockerfile_path: Dockerfile
10 | envs:
11 | - key: MEDIAWIKI_DB_SERVER
12 | scope: RUN_TIME
13 | value: ${whatwg-db.HOSTNAME}:${whatwg-db.PORT}
14 | - key: MEDIAWIKI_DB_NAME
15 | scope: RUN_TIME
16 | value: ${whatwg-db.DATABASE}
17 | - key: MEDIAWIKI_DB_USER
18 | scope: RUN_TIME
19 | value: ${whatwg-db.USERNAME}
20 | - key: MEDIAWIKI_DB_PASSWORD
21 | scope: RUN_TIME
22 | value: ${whatwg-db.PASSWORD}
23 | - key: MEDIAWIKI_SECRET_KEY
24 | scope: RUN_TIME
25 | type: SECRET
26 | value: __MEDIAWIKI_SECRET_KEY__
27 | - key: RECAPTCHA_SECRET_KEY
28 | scope: RUN_TIME
29 | type: SECRET
30 | value: __RECAPTCHA_SECRET_KEY__
31 | github:
32 | branch: main
33 | deploy_on_push: true
34 | repo: whatwg/wiki.whatwg.org
35 | health_check:
36 | http_path: /wiki/What_you_can_do
37 | http_port: 80
38 | instance_count: 1
39 | instance_size_slug: basic-s
40 | name: wiki
41 | routes:
42 | - path: /
43 | databases:
44 | - cluster_name: whatwg-db
45 | db_name: mediawiki
46 | db_user: mediawiki
47 | engine: MYSQL
48 | name: whatwg-db
49 | production: true
50 | version: "8"
51 |
--------------------------------------------------------------------------------
/test/caching.mjs:
--------------------------------------------------------------------------------
1 | import assert from 'assert';
2 |
3 | const CACHE_TESTS = [
4 | 'https://html.spec.whatwg.org/fonts/Essays1743.ttf',
5 | 'https://html.spec.whatwg.org/images/abstract.jpeg',
6 | 'https://html.spec.whatwg.org/images/wolf.jpg',
7 | 'https://images.whatwg.org/abstract.png',
8 | 'https://images.whatwg.org/content-venn.svg',
9 | 'https://images.whatwg.org/logo',
10 | 'https://images.whatwg.org/robots.jpeg',
11 | 'https://resources.whatwg.org/browser-logos/bb.jpg',
12 | 'https://resources.whatwg.org/browser-logos/edge.svg',
13 | 'https://resources.whatwg.org/fonts/SourceSansPro-Regular.woff',
14 | 'https://resources.whatwg.org/fonts/SourceSansPro-Regular.woff2',
15 | 'https://resources.whatwg.org/logo.png',
16 | ];
17 |
18 | const NO_CACHE_TESTS = [
19 | 'https://html.spec.whatwg.org/multipage/',
20 | 'https://images.whatwg.org/README.txt',
21 | 'https://resources.whatwg.org/standard.css',
22 | ];
23 |
24 | function test(url, expected) {
25 | specify(url, async function() {
26 | // redirecting is a failure since we might then test the wrong server
27 | const response = await fetch(url, { redirect: 'manual' });
28 | assert.strictEqual(response.status, 200);
29 | assert.strictEqual(response.headers.get('cache-control'), expected);
30 | });
31 | }
32 |
33 | describe('caching', function() {
34 | describe('URLs with cache-control header', function() {
35 | for (const url of CACHE_TESTS) {
36 | test(url, 'max-age=604800'); // 7 days
37 | }
38 | });
39 | describe('URLs without cache-control', function() {
40 | for (const url of NO_CACHE_TESTS) {
41 | test(url, null);
42 | }
43 | });
44 | });
45 |
--------------------------------------------------------------------------------
/html5.org/tools/icons/authors:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/debian/marquee/nginx/conf/whatwg.conf:
--------------------------------------------------------------------------------
1 | listen 443 ssl http2;
2 | listen [::]:443 ssl http2;
3 |
4 | ssl_certificate /etc/letsencrypt/live/whatwg.org/fullchain.pem;
5 | ssl_certificate_key /etc/letsencrypt/live/whatwg.org/privkey.pem;
6 | ssl_session_cache shared:SSL:50m;
7 | ssl_session_timeout 1d;
8 | ssl_session_tickets off; # https://github.com/mozilla/server-side-tls/issues/135
9 |
10 | ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
11 |
12 | ssl_prefer_server_ciphers on;
13 |
14 | ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
15 |
16 | ssl_dhparam /etc/ssl/certs/dhparam.pem;
17 |
18 | gzip on;
19 | gzip_disable "msie6";
20 |
21 | gzip_vary on;
22 | gzip_proxied any;
23 | gzip_comp_level 6;
24 | gzip_buffers 16 8k;
25 | gzip_http_version 1.1;
26 | gzip_types text/plain text/css application/json text/xml application/xml image/svg+xml application/xml+rss text/javascript;
27 |
28 | include whatwg-headers.conf;
29 |
30 | fancyindex on;
31 | fancyindex_exact_size off;
32 | fancyindex_css_href "https://resources.whatwg.org/nginx-fancyindex-whatwg.css";
33 |
34 | location /commit-snapshots {
35 | fancyindex_default_sort date_desc;
36 | }
37 |
38 | location /review-drafts {
39 | fancyindex_default_sort name_desc;
40 | }
41 |
42 | include mime.types; # prevents adding types from clobbering all other defaults
43 | types {
44 | application/x-gzip gz tgz;
45 | font/ttf ttf; # https://www.iana.org/assignments/media-types/font/ttf
46 | font/woff2 woff2; # https://www.iana.org/assignments/media-types/font/woff2
47 | text/cache-manifest appcache;
48 | text/javascript map;
49 | text/plain md sh;
50 | video/ogg ogv; # https://www.iana.org/assignments/media-types/video/ogg
51 | }
52 |
53 | location ~* \.js$ {
54 | types { }
55 | # Note: charset=utf-8 need to be repeated here, it's not redundant.
56 | default_type "text/javascript; charset=utf-8";
57 | }
58 |
59 | charset utf-8;
60 |
--------------------------------------------------------------------------------
/test/certs.mjs:
--------------------------------------------------------------------------------
1 | import https from 'https';
2 |
3 | // Let's Encrypt should renew when 30 days remain, so if it's less than 25
4 | // something is wrong with certificate automation.
5 | const MIN_DAYS = 25;
6 |
7 | const DOMAINS = [
8 | 'blog.whatwg.org',
9 | 'books.idea.whatwg.org',
10 | 'books.spec.whatwg.org',
11 | 'build.whatwg.org',
12 | 'c.whatwg.org',
13 | 'compat.spec.whatwg.org',
14 | 'compression.spec.whatwg.org',
15 | 'console.spec.whatwg.org',
16 | 'cookiestore.spec.whatwg.org',
17 | 'developer.whatwg.org',
18 | 'developers.whatwg.org',
19 | 'dom.spec.whatwg.org',
20 | 'domparsing.spec.whatwg.org',
21 | 'encoding.spec.whatwg.org',
22 | 'fetch.spec.whatwg.org',
23 | 'figures.idea.whatwg.org',
24 | 'figures.spec.whatwg.org',
25 | 'forums.whatwg.org',
26 | 'fs.spec.whatwg.org',
27 | 'fullscreen.spec.whatwg.org',
28 | 'help.whatwg.org',
29 | 'html-differences.whatwg.org',
30 | 'html.spec.whatwg.org',
31 | 'lists.whatwg.org',
32 | 'idea.whatwg.org',
33 | 'images.whatwg.org',
34 | 'infra.spec.whatwg.org',
35 | 'javascript.spec.whatwg.org',
36 | 'mediasession.spec.whatwg.org',
37 | 'mimesniff.spec.whatwg.org',
38 | 'n.whatwg.org',
39 | 'notifications.spec.whatwg.org',
40 | 'quirks.spec.whatwg.org',
41 | 'participate.whatwg.org',
42 | 'resources.whatwg.org',
43 | 'spec.whatwg.org',
44 | 'specs.whatwg.org',
45 | 'storage.spec.whatwg.org',
46 | 'streams.spec.whatwg.org',
47 | 'svn.whatwg.org',
48 | 'testutils.spec.whatwg.org',
49 | 'url.spec.whatwg.org',
50 | 'urlpattern.spec.whatwg.org',
51 | 'validator.whatwg.org',
52 | 'webidl.spec.whatwg.org',
53 | 'websocket.spec.whatwg.org',
54 | 'websockets.spec.whatwg.org',
55 | 'webvtt.spec.whatwg.org',
56 | 'whatwg.org',
57 | 'wiki.whatwg.org',
58 | 'www.whatwg.org',
59 | 'xhr.spec.whatwg.org',
60 | 'xn--7ca.whatwg.org',
61 | ];
62 |
63 | function getCertificate(hostname) {
64 | return new Promise((resolve, reject) => {
65 | const options = {
66 | hostname: hostname,
67 | // Use a new agent every time, as getPeerCertificate() can return an
68 | // empty object if the connection is reused. (Maybe a bug, unclear.)
69 | agent: new https.Agent,
70 | };
71 | const req = https.request(options, res => {
72 | resolve(res.connection.getPeerCertificate());
73 | });
74 | req.on('error', err => reject(err));
75 | req.end();
76 | });
77 | }
78 |
79 | describe('certificate expiry date', function() {
80 | const now = Date.now();
81 |
82 | for (const domain of DOMAINS) {
83 | specify(domain, async function() {
84 | const cert = await getCertificate(domain);
85 | const valid_to = Date.parse(cert.valid_to);
86 | if (!isFinite(valid_to)) {
87 | throw new Error(`invalid cert expiry date: ${cert.valid_to}`);
88 | }
89 | const days_left = (valid_to - now) / (24 * 3600 * 1000);
90 | if (days_left < MIN_DAYS) {
91 | throw new Error(`cert expires in less than ${MIN_DAYS} days: ${cert.valid_to}`);
92 | }
93 | });
94 | }
95 | });
96 |
--------------------------------------------------------------------------------
/html5.org/tools/icons/tools:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/debian/marquee/nginx/sites/whatwg.org.conf:
--------------------------------------------------------------------------------
1 | server {
2 | server_name whatwg.org;
3 | root /var/www/whatwg.org;
4 |
5 | include /etc/nginx/whatwg.conf;
6 |
7 | error_page 404 /404;
8 | error_page 410 /410;
9 |
10 | # There are many files with no extension, and a lot of default_type
11 | # directives to get it right. The default is text/html.
12 | default_type text/html;
13 |
14 | location = /status-2008-12 {
15 | default_type text/plain;
16 | }
17 | location ~ ^/specs/web-forms/.*/xforms-implementation-diagram$ {
18 | default_type image/png;
19 | }
20 | location ~ ^/specs/web-forms/.*/sample- {
21 | default_type image/png;
22 | }
23 | location /style/ {
24 | default_type text/css;
25 | }
26 |
27 | # 301/302 redirects
28 | location ~ ^/(domparsing|dp)$ {
29 | return 301 https://domparsing.spec.whatwg.org/;
30 | }
31 | location ~ ^/(dom|d)$ {
32 | return 301 https://dom.spec.whatwg.org/;
33 | }
34 | location ~ ^/(encoding|e)$ {
35 | return 301 https://encoding.spec.whatwg.org/;
36 | }
37 | location ~ ^/(fetch|cors)$ {
38 | return 301 https://fetch.spec.whatwg.org/;
39 | }
40 | location ~ ^/(fullscreen|fs|f)$ {
41 | return 301 https://fullscreen.spec.whatwg.org/;
42 | }
43 | location ~ ^/(html|HTML)5?(/(.*))?$ {
44 | return 301 https://html.spec.whatwg.org/multipage/$3;
45 | }
46 | location ~ ^/(javascript|js|j)$ {
47 | return 301 https://javascript.spec.whatwg.org/;
48 | }
49 | location ~ ^/(mimesniff|m)$ {
50 | return 301 https://mimesniff.spec.whatwg.org/;
51 | }
52 | location ~ ^/(notifications|n)$ {
53 | return 301 https://notifications.spec.whatwg.org/;
54 | }
55 | location ~ ^/(quirks|q)$ {
56 | return 301 https://quirks.spec.whatwg.org/;
57 | }
58 | location ~ ^/(url|u)$ {
59 | return 301 https://url.spec.whatwg.org/;
60 | }
61 | location ~ ^/(xhr|x)$ {
62 | return 301 https://xhr.spec.whatwg.org/;
63 | }
64 | location ~ ^/C(/(.*))?$ {
65 | return 301 https://html.spec.whatwg.org/multipage/$2;
66 | }
67 | location ~ ^/c(/(.*))?$ {
68 | return 301 https://html.spec.whatwg.org/$2;
69 | }
70 | location ~ ^/current-work(/(.*))?$ {
71 | return 301 https://spec.whatwg.org/$2;
72 | }
73 | location ~ ^/(demos/(date|multiform|repeat)-01/.*)$ {
74 | return 301 https://github.com/whatwg/whatwg.org/tree/417c7bf7a19375c4fbf4a68146153a6baeadecdb/$1;
75 | }
76 | location ~ ^/demos/canvas(/(.*))?$ {
77 | return 301 https://html.spec.whatwg.org/demos/canvas/$2;
78 | }
79 | location ~ ^/demos/offline/clock(/live-demo)?(/(.*))?$ {
80 | return 301 https://html.spec.whatwg.org/demos/offline/clock/$3;
81 | }
82 | location ~ ^/demos/workers(/(.*))?$ {
83 | return 301 https://html.spec.whatwg.org/demos/workers/$2;
84 | }
85 | location ~ ^/images(/(.*))?$ {
86 | return 302 https://images.whatwg.org/$2;
87 | }
88 | location = /irc {
89 | return 301 https://whatwg.org/chat;
90 | }
91 | location = /link-fixup.js {
92 | return 301 https://html.spec.whatwg.org/multipage/link-fixup.js;
93 | }
94 | location = /mailing-list) {
95 | return 301 https://whatwg.org/mailing-list;
96 | }
97 | location = /mailing-list {
98 | return 301 https://lists.whatwg.org/;
99 | }
100 | location = /newbug {
101 | return 302 https://github.com/whatwg/html/issues/new/choose;
102 | }
103 | location = /pdf {
104 | return 301 https://html.spec.whatwg.org/print.pdf;
105 | }
106 | location = /position-paper {
107 | return 301 https://www.w3.org/2004/04/webapps-cdf-ws/papers/opera.html;
108 | }
109 | location = /specs {
110 | return 301 https://spec.whatwg.org/;
111 | }
112 | location = /specs/ {
113 | return 301 https://spec.whatwg.org/;
114 | }
115 | location ~ ^/specs/html5(/(.*))?$ {
116 | return 301 https://html.spec.whatwg.org/multipage/$2;
117 | }
118 | location ~ ^/specs/url/current-work(/(.*))?$ {
119 | return 301 https://url.spec.whatwg.org/$2;
120 | }
121 | location /specs/vocabs {
122 | return 301 https://html.spec.whatwg.org/multipage/microdata.html;
123 | }
124 | location ~ ^/specs/web-apps/2007-10-26/multipage/images(/(.*))?$ {
125 | return 301 /specs/web-apps/2007-10-26/images/$2;
126 | }
127 | location = /specs/web-apps/current-work/complete.html {
128 | return 301 https://html.spec.whatwg.org/;
129 | }
130 | location ~ ^/specs/web-apps/current-work/complete(/(.*))?$ {
131 | return 301 https://html.spec.whatwg.org/multipage/$2;
132 | }
133 | location = /specs/web-apps/current-work/html-a4.pdf {
134 | return 301 https://html.spec.whatwg.org/print.pdf;
135 | }
136 | location = /specs/web-apps/current-work/html-letter.pdf {
137 | return 301 https://html.spec.whatwg.org/print.pdf;
138 | }
139 | location = /specs/web-apps/current-work/html5-a4.pdf {
140 | return 301 https://html.spec.whatwg.org/print.pdf;
141 | }
142 | location = /specs/web-apps/current-work/html5-letter.pdf {
143 | return 301 https://html.spec.whatwg.org/print.pdf;
144 | }
145 | location = /specs/web-apps/current-work/webrtc.html {
146 | return 301 https://w3c.github.io/webrtc-pc/;
147 | }
148 | location = /specs/web-apps/current-work/websrt.html {
149 | return 301 https://w3c.github.io/webvtt/;
150 | }
151 | location = /specs/web-apps/current-work/webvtt.html {
152 | return 301 https://w3c.github.io/webvtt/;
153 | }
154 | location ~ ^/specs/web-apps/current-work(/(.*))?$ {
155 | return 301 https://html.spec.whatwg.org/$2;
156 | }
157 | location ~ ^/specs/web-apps/html5(/(.*))?$ {
158 | return 301 https://html.spec.whatwg.org/multipage/$2;
159 | }
160 | location /specs/web-forms/tests {
161 | return 301 https://github.com/w3c/web-platform-tests;
162 | }
163 | location /specs/web-socket-protocol {
164 | return 301 https://tools.ietf.org/html/rfc6455;
165 | }
166 | location = /specs/web-workers/current-work/ {
167 | return 301 https://html.spec.whatwg.org/multipage/workers.html;
168 | }
169 | location = /wf2 {
170 | return 301 "https://html.spec.whatwg.org/multipage/#forms";
171 | }
172 | location = /ws {
173 | return 301 "https://html.spec.whatwg.org/multipage/#network";
174 | }
175 | location = /ww {
176 | return 301 "https://html.spec.whatwg.org/multipage/#workers";
177 | }
178 |
179 | # 410 Gone resources
180 | location = /issues {
181 | return 410;
182 | }
183 | location = /charter.pl {
184 | return 410;
185 | }
186 | location = /mailing-list.pl {
187 | return 410;
188 | }
189 | }
190 |
--------------------------------------------------------------------------------
/test/content-type.mjs:
--------------------------------------------------------------------------------
1 | import assert from 'assert';
2 |
3 | const EXTENSION_TESTS = [
4 | ['https://resources.whatwg.org/standard.css', 'text/css'],
5 | ['https://whatwg.org/style/shared.css', 'text/css'],
6 | ['https://whatwg.org/specs/web-workers/current-work/rationale.html', 'text/html; charset=utf-8'],
7 | ['https://html.spec.whatwg.org/images/abstract.jpeg', 'image/jpeg'],
8 | ['https://resources.whatwg.org/browser-logos/bb.jpg', 'image/jpeg'],
9 | ['https://resources.whatwg.org/file-issue.js', 'text/javascript; charset=utf-8'],
10 | ['https://resources.whatwg.org/biblio.json', 'application/json'],
11 | ['https://streams.spec.whatwg.org/demos/resources/web-animations.min.js.map', 'text/javascript'], // TODO: charset=utf-8
12 | ['https://resources.whatwg.org/README.md', 'text/plain; charset=utf-8'],
13 | ['https://resources.whatwg.org/logo.png', 'image/png'],
14 | ['https://resources.whatwg.org/build/deploy.sh', 'text/plain; charset=utf-8'],
15 | ['https://resources.whatwg.org/logo.svg', 'image/svg+xml'],
16 | ['https://whatwg.org/robots.txt', 'text/plain; charset=utf-8'],
17 | ['https://resources.whatwg.org/fonts/SourceSansPro-Regular.woff', 'application/font-woff'],
18 | ['https://resources.whatwg.org/fonts/SourceSansPro-Regular.woff2', 'font/woff2'],
19 | ];
20 |
21 | const WITHOUT_EXTENSION_TESTS = [
22 | ['https://images.whatwg.org/CFC', 'image/png'],
23 | ['https://images.whatwg.org/CFI', 'image/png'],
24 | ['https://images.whatwg.org/REC', 'image/png'],
25 | ['https://images.whatwg.org/WD', 'image/png'],
26 | ['https://images.whatwg.org/icon', 'image/png'],
27 | ['https://images.whatwg.org/icon-white', 'image/png'],
28 | ['https://images.whatwg.org/logo', 'image/png'],
29 | ['https://images.whatwg.org/logo-white', 'image/png'],
30 | ['https://images.whatwg.org/spinner', 'image/png'],
31 | ['https://images.whatwg.org/tabs-left', 'image/png'],
32 | ['https://images.whatwg.org/tabs-right', 'image/png'],
33 | ['https://n.whatwg.org/formdata', 'text/plain; charset=utf-8'],
34 | ['https://n.whatwg.org/work', 'text/plain; charset=utf-8'],
35 | ['https://whatwg.org/404', 'text/html; charset=utf-8'],
36 | ['https://whatwg.org/410', 'text/html; charset=utf-8'],
37 | ['https://whatwg.org/charter', 'text/html; charset=utf-8'],
38 | ['https://whatwg.org/code-of-conduct', 'text/html; charset=utf-8'],
39 | ['https://whatwg.org/faq', 'text/html; charset=utf-8'],
40 | ['https://whatwg.org/news/future-of-html', 'text/html; charset=utf-8'],
41 | ['https://whatwg.org/news/start', 'text/html; charset=utf-8'],
42 | ['https://whatwg.org/news/web-forms-call-for-comments-1', 'text/html; charset=utf-8'],
43 | ['https://whatwg.org/news/web-forms-call-for-comments-2', 'text/html; charset=utf-8'],
44 | ['https://whatwg.org/news/web-forms-call-for-comments-3', 'text/html; charset=utf-8'],
45 | ['https://whatwg.org/news/web-forms-call-for-comments-4', 'text/html; charset=utf-8'],
46 | ['https://whatwg.org/specs/web-apps/2006-01-01/diff-2005-09-01', 'text/html; charset=utf-8'],
47 | ['https://whatwg.org/specs/web-forms/2004-06-27-call-for-comments/sample-datetime-ui-1', 'image/png'],
48 | ['https://whatwg.org/specs/web-forms/2004-06-27-call-for-comments/sample-datetime-ui-2', 'image/png'],
49 | ['https://whatwg.org/specs/web-forms/2004-06-27-call-for-comments/sample-datetime-ui-3', 'image/png'],
50 | ['https://whatwg.org/specs/web-forms/2004-06-27-call-for-comments/sample-multiple-editable-ui', 'image/png'],
51 | ['https://whatwg.org/specs/web-forms/2004-06-27-call-for-comments/xforms-implementation-diagram', 'image/png'],
52 | ['https://whatwg.org/specs/web-forms/2004-12-10-call-for-comments/diff-2004-06-27-call-for-comments', 'text/html; charset=utf-8'],
53 | ['https://whatwg.org/specs/web-forms/2004-12-10-call-for-comments/sample-autocompletion-ui-1', 'image/png'],
54 | ['https://whatwg.org/specs/web-forms/2004-12-10-call-for-comments/sample-autocompletion-ui-2', 'image/png'],
55 | ['https://whatwg.org/specs/web-forms/2004-12-10-call-for-comments/sample-datetime-ui-1', 'image/png'],
56 | ['https://whatwg.org/specs/web-forms/2004-12-10-call-for-comments/sample-datetime-ui-2', 'image/png'],
57 | ['https://whatwg.org/specs/web-forms/2004-12-10-call-for-comments/sample-datetime-ui-3', 'image/png'],
58 | ['https://whatwg.org/specs/web-forms/2004-12-10-call-for-comments/sample-multiple-editable-ui', 'image/png'],
59 | ['https://whatwg.org/specs/web-forms/2004-12-10-call-for-comments/xforms-implementation-diagram', 'image/png'],
60 | ['https://whatwg.org/specs/web-forms/2005-01-28-call-for-comments/diff-2004-06-27-call-for-comments', 'text/html; charset=utf-8'],
61 | ['https://whatwg.org/specs/web-forms/2005-01-28-call-for-comments/diff-2004-12-10-call-for-comments', 'text/html; charset=utf-8'],
62 | ['https://whatwg.org/specs/web-forms/2005-01-28-call-for-comments/sample-autocompletion-ui-1', 'image/png'],
63 | ['https://whatwg.org/specs/web-forms/2005-01-28-call-for-comments/sample-autocompletion-ui-2', 'image/png'],
64 | ['https://whatwg.org/specs/web-forms/2005-01-28-call-for-comments/sample-datetime-ui-1', 'image/png'],
65 | ['https://whatwg.org/specs/web-forms/2005-01-28-call-for-comments/sample-datetime-ui-2', 'image/png'],
66 | ['https://whatwg.org/specs/web-forms/2005-01-28-call-for-comments/sample-datetime-ui-3', 'image/png'],
67 | ['https://whatwg.org/specs/web-forms/2005-01-28-call-for-comments/sample-multiple-editable-ui', 'image/png'],
68 | ['https://whatwg.org/specs/web-forms/2005-01-28-call-for-comments/xforms-implementation-diagram', 'image/png'],
69 | ['https://whatwg.org/specs/web-forms/2005-02-07-submission/diff-2005-01-28-call-for-comments', 'text/html; charset=utf-8'],
70 | ['https://whatwg.org/specs/web-forms/2005-02-07-submission/sample-autocompletion-ui-1', 'image/png'],
71 | ['https://whatwg.org/specs/web-forms/2005-02-07-submission/sample-autocompletion-ui-2', 'image/png'],
72 | ['https://whatwg.org/specs/web-forms/2005-02-07-submission/sample-datetime-ui-1', 'image/png'],
73 | ['https://whatwg.org/specs/web-forms/2005-02-07-submission/sample-datetime-ui-2', 'image/png'],
74 | ['https://whatwg.org/specs/web-forms/2005-02-07-submission/sample-datetime-ui-3', 'image/png'],
75 | ['https://whatwg.org/specs/web-forms/2005-02-07-submission/sample-multiple-editable-ui', 'image/png'],
76 | ['https://whatwg.org/specs/web-forms/2005-02-07-submission/submission', 'text/html; charset=utf-8'],
77 | ['https://whatwg.org/specs/web-forms/2005-02-07-submission/xforms-implementation-diagram', 'image/png'],
78 | ['https://whatwg.org/specs/web-forms/2005-04-11-call-for-comments/diff-2004-06-27-call-for-comments', 'text/html; charset=utf-8'],
79 | ['https://whatwg.org/specs/web-forms/2005-04-11-call-for-comments/diff-2004-12-10-call-for-comments', 'text/html; charset=utf-8'],
80 | ['https://whatwg.org/specs/web-forms/2005-04-11-call-for-comments/diff-2005-01-28-call-for-comments', 'text/html; charset=utf-8'],
81 | ['https://whatwg.org/specs/web-forms/2005-04-11-call-for-comments/sample-autocompletion-ui-1', 'image/png'],
82 | ['https://whatwg.org/specs/web-forms/2005-04-11-call-for-comments/sample-autocompletion-ui-2', 'image/png'],
83 | ['https://whatwg.org/specs/web-forms/2005-04-11-call-for-comments/sample-datetime-ui-1', 'image/png'],
84 | ['https://whatwg.org/specs/web-forms/2005-04-11-call-for-comments/sample-datetime-ui-2', 'image/png'],
85 | ['https://whatwg.org/specs/web-forms/2005-04-11-call-for-comments/sample-datetime-ui-3', 'image/png'],
86 | ['https://whatwg.org/specs/web-forms/2005-04-11-call-for-comments/sample-multiple-editable-ui', 'image/png'],
87 | ['https://whatwg.org/specs/web-forms/2005-04-11-call-for-comments/xforms-implementation-diagram', 'image/png'],
88 | ['https://whatwg.org/specs/web-forms/2005-07-03/diff-2005-01-28-call-for-comments', 'text/html; charset=utf-8'],
89 | ['https://whatwg.org/specs/web-forms/2005-07-03/diff-2005-04-11-call-for-comments', 'text/html; charset=utf-8'],
90 | ['https://whatwg.org/specs/web-forms/2005-07-03/sample-autocompletion-ui-1', 'image/png'],
91 | ['https://whatwg.org/specs/web-forms/2005-07-03/sample-autocompletion-ui-2', 'image/png'],
92 | ['https://whatwg.org/specs/web-forms/2005-07-03/sample-datetime-ui-1', 'image/png'],
93 | ['https://whatwg.org/specs/web-forms/2005-07-03/sample-datetime-ui-2', 'image/png'],
94 | ['https://whatwg.org/specs/web-forms/2005-07-03/sample-datetime-ui-3', 'image/png'],
95 | ['https://whatwg.org/specs/web-forms/2005-07-03/sample-multiple-editable-ui', 'image/png'],
96 | ['https://whatwg.org/specs/web-forms/2005-07-03/xforms-implementation-diagram', 'image/png'],
97 | ['https://whatwg.org/specs/web-forms/2005-09-01/diff-2005-04-11-call-for-comments', 'text/html; charset=utf-8'],
98 | ['https://whatwg.org/specs/web-forms/2005-09-01/diff-2005-07-03', 'text/html; charset=utf-8'],
99 | ['https://whatwg.org/specs/web-forms/2005-09-01/sample-autocompletion-ui-1', 'image/png'],
100 | ['https://whatwg.org/specs/web-forms/2005-09-01/sample-autocompletion-ui-2', 'image/png'],
101 | ['https://whatwg.org/specs/web-forms/2005-09-01/sample-datetime-ui-1', 'image/png'],
102 | ['https://whatwg.org/specs/web-forms/2005-09-01/sample-datetime-ui-2', 'image/png'],
103 | ['https://whatwg.org/specs/web-forms/2005-09-01/sample-datetime-ui-3', 'image/png'],
104 | ['https://whatwg.org/specs/web-forms/2005-09-01/sample-multiple-editable-ui', 'image/png'],
105 | ['https://whatwg.org/specs/web-forms/2005-09-01/xforms-implementation-diagram', 'image/png'],
106 | ['https://whatwg.org/specs/web-forms/current-work/diff-2005-01-28-call-for-comments', 'text/html; charset=utf-8'],
107 | ['https://whatwg.org/specs/web-forms/current-work/diff-2005-04-11-call-for-comments', 'text/html; charset=utf-8'],
108 | ['https://whatwg.org/specs/web-forms/current-work/diff-2005-07-03', 'text/html; charset=utf-8'],
109 | ['https://whatwg.org/specs/web-forms/current-work/diff-2005-09-01', 'text/html; charset=utf-8'],
110 | ['https://whatwg.org/specs/web-forms/current-work/header-w3c', 'text/html; charset=utf-8'],
111 | ['https://whatwg.org/specs/web-forms/current-work/header-whatwg', 'text/html; charset=utf-8'],
112 | ['https://whatwg.org/specs/web-forms/current-work/sample-autocompletion-ui-1', 'image/png'],
113 | ['https://whatwg.org/specs/web-forms/current-work/sample-autocompletion-ui-2', 'image/png'],
114 | ['https://whatwg.org/specs/web-forms/current-work/sample-datetime-ui-1', 'image/png'],
115 | ['https://whatwg.org/specs/web-forms/current-work/sample-datetime-ui-2', 'image/png'],
116 | ['https://whatwg.org/specs/web-forms/current-work/sample-datetime-ui-3', 'image/png'],
117 | ['https://whatwg.org/specs/web-forms/current-work/sample-multiple-editable-ui', 'image/png'],
118 | ['https://whatwg.org/specs/web-forms/current-work/xforms-implementation-diagram', 'image/png'],
119 | ['https://whatwg.org/status-2008-12', 'text/plain; charset=utf-8'],
120 | ['https://whatwg.org/style/specification', 'text/css'],
121 | ['https://whatwg.org/working-mode', 'text/html; charset=utf-8'],
122 | ];
123 |
124 | function test([url, expected]) {
125 | specify(url, async function() {
126 | // redirecting is a failure since we might then test the wrong server
127 | const response = await fetch(url, { redirect: 'manual' });
128 | assert.strictEqual(response.status, 200);
129 | assert.strictEqual(response.headers.get('content-type'), expected);
130 | });
131 | }
132 |
133 | describe('content-type header', function() {
134 | describe('URLs with extension', function() {
135 | EXTENSION_TESTS.map(test);
136 | });
137 | describe('URLs without extension', function() {
138 | WITHOUT_EXTENSION_TESTS.map(test);
139 | });
140 | });
141 |
--------------------------------------------------------------------------------
/test/redirects.mjs:
--------------------------------------------------------------------------------
1 | import assert from 'assert';
2 |
3 | // arrays of [url to fetch, HTTP status, location header, keep /foo?]
4 |
5 | const HTTP_TESTS = [
6 | // http -> https redirects
7 | ['http://blog.whatwg.org/', 301, 'https://blog.whatwg.org/', 'keep'],
8 | ['http://books.idea.whatwg.org/', 301, 'https://books.idea.whatwg.org/', 'keep'],
9 | ['http://books.spec.whatwg.org/', 301, 'https://books.spec.whatwg.org/', 'keep'],
10 | ['http://c.whatwg.org/', 301, 'https://c.whatwg.org/', 'keep'],
11 | ['http://compat.spec.whatwg.org/', 301, 'https://compat.spec.whatwg.org/', 'keep'],
12 | ['http://console.spec.whatwg.org/', 301, 'https://console.spec.whatwg.org/', 'keep'],
13 | ['http://developer.whatwg.org/', 301, 'https://developer.whatwg.org/', 'keep'],
14 | ['http://developers.whatwg.org/', 301, 'https://developers.whatwg.org/', 'keep'],
15 | ['http://dom.spec.whatwg.org/', 301, 'https://dom.spec.whatwg.org/', 'keep'],
16 | ['http://domparsing.spec.whatwg.org/', 301, 'https://domparsing.spec.whatwg.org/', 'keep'],
17 | ['http://encoding.spec.whatwg.org/', 301, 'https://encoding.spec.whatwg.org/', 'keep'],
18 | ['http://fetch.spec.whatwg.org/', 301, 'https://fetch.spec.whatwg.org/', 'keep'],
19 | ['http://figures.idea.whatwg.org/', 301, 'https://figures.idea.whatwg.org/', 'keep'],
20 | ['http://figures.spec.whatwg.org/', 301, 'https://figures.spec.whatwg.org/', 'keep'],
21 | ['http://forums.whatwg.org/', 301, 'https://forums.whatwg.org/', 'keep'],
22 | ['http://fullscreen.spec.whatwg.org/', 301, 'https://fullscreen.spec.whatwg.org/', 'keep'],
23 | ['http://help.whatwg.org/', 301, 'https://help.whatwg.org/', 'keep'],
24 | ['http://html-differences.whatwg.org/', 301, 'https://html-differences.whatwg.org/', 'keep'],
25 | ['http://html.spec.whatwg.org/', 301, 'https://html.spec.whatwg.org/', 'keep'],
26 | ['http://idea.whatwg.org/', 301, 'https://idea.whatwg.org/', 'keep'],
27 | ['http://images.whatwg.org/', 301, 'https://images.whatwg.org/', 'keep'],
28 | ['http://infra.spec.whatwg.org/', 301, 'https://infra.spec.whatwg.org/', 'keep'],
29 | ['http://javascript.spec.whatwg.org/', 301, 'https://javascript.spec.whatwg.org/', 'keep'],
30 | ['http://lists.whatwg.org/', 301, 'https://lists.whatwg.org/', 'keep'],
31 | ['http://mediasession.spec.whatwg.org/', 301, 'https://mediasession.spec.whatwg.org/', 'keep'],
32 | ['http://mimesniff.spec.whatwg.org/', 301, 'https://mimesniff.spec.whatwg.org/', 'keep'],
33 | ['http://n.whatwg.org/', 301, 'https://n.whatwg.org/', 'keep'],
34 | ['http://notifications.spec.whatwg.org/', 301, 'https://notifications.spec.whatwg.org/', 'keep'],
35 | ['http://participate.whatwg.org/', 301, 'https://participate.whatwg.org/', 'keep'],
36 | ['http://quirks.spec.whatwg.org/', 301, 'https://quirks.spec.whatwg.org/', 'keep'],
37 | ['http://resources.whatwg.org/', 301, 'https://resources.whatwg.org/', 'keep'],
38 | ['http://spec.whatwg.org/', 301, 'https://spec.whatwg.org/', 'keep'],
39 | ['http://specs.whatwg.org/', 301, 'https://specs.whatwg.org/', 'keep'],
40 | ['http://storage.spec.whatwg.org/', 301, 'https://storage.spec.whatwg.org/', 'keep'],
41 | ['http://streams.spec.whatwg.org/', 301, 'https://streams.spec.whatwg.org/', 'keep'],
42 | ['http://svn.whatwg.org/', 301, 'https://svn.whatwg.org/', 'keep'],
43 | ['http://url.spec.whatwg.org/', 301, 'https://url.spec.whatwg.org/', 'keep'],
44 | ['http://validator.whatwg.org/', 301, 'https://validator.whatwg.org/', 'keep'],
45 | ['http://webvtt.spec.whatwg.org/', 301, 'https://webvtt.spec.whatwg.org/', 'keep'],
46 | ['http://whatwg.org/', 301, 'https://whatwg.org/', 'keep'],
47 | ['http://whatwg.org/c', 301, 'https://whatwg.org/c', 'keep'],
48 | ['http://wiki.whatwg.org/', 301, 'https://wiki.whatwg.org/', 'keep'],
49 | ['http://www.whatwg.org/', 301, 'https://www.whatwg.org/', 'keep'],
50 | ['http://xhr.spec.whatwg.org/', 301, 'https://xhr.spec.whatwg.org/', 'keep'],
51 | ['http://xn--7ca.whatwg.org/', 301, 'https://xn--7ca.whatwg.org/', 'keep'],
52 | ];
53 |
54 | const HTTPS_TESTS = [
55 | ['https://books.spec.whatwg.org/', 302, 'https://books.idea.whatwg.org/', 'keep'],
56 | ['https://c.whatwg.org/', 301, 'https://html.spec.whatwg.org/', 'keep'],
57 | ['https://developer.whatwg.org/', 301, 'https://html.spec.whatwg.org/dev/', 'keep'],
58 | ['https://developers.whatwg.org/', 301, 'https://html.spec.whatwg.org/dev/', 'keep'],
59 | ['https://domparsing.spec.whatwg.org/', 302, 'https://w3c.github.io/DOM-Parsing/', 'drop'],
60 | ['https://encoding.spec.whatwg.org/index-gbk.txt', 410],
61 | ['https://figures.spec.whatwg.org/', 302, 'https://figures.idea.whatwg.org/', 'keep'],
62 | ['https://forums.whatwg.org/', 301, 'https://forums.whatwg.org/bb3/'],
63 | ['https://forums.whatwg.org/bb3/viewtopic.php?f=3&p=8538&sid=1cb9e434c59258d940d476648b0301df', 301, 'https://forums.whatwg.org/bb3/viewtopic.php?f=3&p=8538'],
64 | ['https://help.whatwg.org/', 301, 'https://html.spec.whatwg.org/dev/', 'drop'],
65 | ['https://html-differences.whatwg.org/', 301, 'https://html.spec.whatwg.org/dev/', 'drop'],
66 | ['https://html.spec.whatwg.org/C', 301, 'https://html.spec.whatwg.org/multipage/', 'keep'],
67 | ['https://html.spec.whatwg.org/complete', 301, 'https://html.spec.whatwg.org/', 'keep'],
68 | ['https://html.spec.whatwg.org/complete.html', 301, 'https://html.spec.whatwg.org/'],
69 | ['https://html.spec.whatwg.org/demos/offline/clock/clock.html', 301, 'https://html.spec.whatwg.org/demos/offline/clock/clock2.html'],
70 | ['https://html.spec.whatwg.org/demos/workers/stocks/', 301, 'https://github.com/whatwg/html/tree/1332efd5e4c27ae859bf2316c6b477d77cf93716/demos/workers/stocks/', 'keep'],
71 | ['https://html.spec.whatwg.org/images/content-venn.png', 301, 'https://html.spec.whatwg.org/images/content-venn.svg'],
72 | ['https://html.spec.whatwg.org/images/contextmenu-collapsed.png', 410],
73 | ['https://html.spec.whatwg.org/images/contextmenu-expanded.png', 410],
74 | ['https://html.spec.whatwg.org/images/parsing-model-overview.png', 301, 'https://html.spec.whatwg.org/images/parsing-model-overview.svg'],
75 | ['https://html.spec.whatwg.org/images/sample-email-1.png', 301, 'https://html.spec.whatwg.org/images/sample-email-1.svg'],
76 | ['https://html.spec.whatwg.org/images/sample-email-2.png', 301, 'https://html.spec.whatwg.org/images/sample-email-2.svg'],
77 | ['https://html.spec.whatwg.org/images/sample-url.png', 301, 'https://html.spec.whatwg.org/images/sample-url.svg'],
78 | ['https://html.spec.whatwg.org/index', 301, 'https://html.spec.whatwg.org/'],
79 | ['https://html.spec.whatwg.org/multipage/embedded-content-0.html', 301, 'https://html.spec.whatwg.org/multipage/embedded-content.html'],
80 | ['https://html.spec.whatwg.org/multipage/entities.json', 301, 'https://html.spec.whatwg.org/entities.json'],
81 | ['https://html.spec.whatwg.org/multipage/images/', 301, 'https://html.spec.whatwg.org/images/'],
82 | ['https://html.spec.whatwg.org/multipage/link-fixup.js', 301, 'https://html.spec.whatwg.org/link-fixup.js'],
83 | ['https://html.spec.whatwg.org/multipage/scripting-1.html', 301, 'https://html.spec.whatwg.org/multipage/scripting.html'],
84 | ['https://html.spec.whatwg.org/multipage/section-sql.html', 410],
85 | ['https://html.spec.whatwg.org/multipage/tabular-data.html', 301, 'https://html.spec.whatwg.org/multipage/tables.html'],
86 | ['https://html.spec.whatwg.org/multipage/websockets', 301, 'https://websockets.spec.whatwg.org/', 'keep'],
87 | ['https://javascript.spec.whatwg.org/', 302, 'https://github.com/tc39/ecma262/labels/web%20reality', 'drop'],
88 | ['https://lists.whatwg.org/htdig.cgi', 301, 'https://lists.whatwg.org/pipermail/', 'keep'],
89 | ['https://lists.whatwg.org/listinfo.cgi', 301, 'https://lists.whatwg.org/'],
90 | ['https://mediasession.spec.whatwg.org/', 302, 'https://w3c.github.io/mediasession/', 'drop'],
91 | ['https://resources.whatwg.org/logo-mime.png', 301, 'https://resources.whatwg.org/logo-mimesniff.png'],
92 | ['https://resources.whatwg.org/logo-mime.svg', 301, 'https://resources.whatwg.org/logo-mimesniff.svg'],
93 | ['https://specs.whatwg.org/', 301, 'https://spec.whatwg.org/', 'drop'],
94 | ['https://svn.whatwg.org/', 301, 'https://github.com/whatwg', 'drop'],
95 | ['https://url.spec.whatwg.org/interop/', 410],
96 | ['https://url.spec.whatwg.org/reference-implementation/', 410],
97 | ['https://url.spec.whatwg.org/reference-implementation/liveview.html', 301, 'https://quuz.org/url/liveview.html'],
98 | ['https://url.spec.whatwg.org/reference-implementation/liveview2.html', 301, 'https://quuz.org/url/liveview2.html'],
99 | ['https://url.spec.whatwg.org/reference-implementation/liveview3.html', 301, 'https://quuz.org/url/liveview3.html'],
100 | ['https://url.spec.whatwg.org/reference-implementation/uri-validate.html', 301, 'https://quuz.org/url/uri-validate.html'],
101 | ['https://validator.whatwg.org/', 301, 'https://whatwg.org/validator/', 'keep'],
102 | ['https://websocket.spec.whatwg.org/', 301, 'https://websockets.spec.whatwg.org/', 'keep'],
103 | ['https://webvtt.spec.whatwg.org/', 302, 'https://w3c.github.io/webvtt/', 'keep'],
104 | ['https://whatwg.org/C', 301, 'https://html.spec.whatwg.org/multipage/', 'keep'],
105 | ['https://whatwg.org/HTML', 301, 'https://html.spec.whatwg.org/multipage/', 'keep'],
106 | ['https://whatwg.org/HTML5', 301, 'https://html.spec.whatwg.org/multipage/', 'keep'],
107 | ['https://whatwg.org/c', 301, 'https://html.spec.whatwg.org/', 'keep'],
108 | ['https://whatwg.org/charter.pl', 410],
109 | ['https://whatwg.org/cors', 301, 'https://fetch.spec.whatwg.org/'],
110 | ['https://whatwg.org/current-work', 301, 'https://spec.whatwg.org/', 'keep'],
111 | ['https://whatwg.org/d', 301, 'https://dom.spec.whatwg.org/'],
112 | ['https://whatwg.org/demos/canvas/', 301, 'https://html.spec.whatwg.org/demos/canvas/', 'keep'],
113 | ['https://whatwg.org/demos/date-01/', 301, 'https://github.com/whatwg/whatwg.org/tree/417c7bf7a19375c4fbf4a68146153a6baeadecdb/demos/date-01/', 'keep'],
114 | ['https://whatwg.org/demos/multiform-01/', 301, 'https://github.com/whatwg/whatwg.org/tree/417c7bf7a19375c4fbf4a68146153a6baeadecdb/demos/multiform-01/', 'keep'],
115 | ['https://whatwg.org/demos/offline/clock/', 301, 'https://html.spec.whatwg.org/demos/offline/clock/', 'keep'],
116 | ['https://whatwg.org/demos/offline/clock/live-demo/', 301, 'https://html.spec.whatwg.org/demos/offline/clock/', 'keep'],
117 | ['https://whatwg.org/demos/repeat-01/', 301, 'https://github.com/whatwg/whatwg.org/tree/417c7bf7a19375c4fbf4a68146153a6baeadecdb/demos/repeat-01/', 'keep'],
118 | ['https://whatwg.org/demos/workers/', 301, 'https://html.spec.whatwg.org/demos/workers/', 'keep'],
119 | ['https://whatwg.org/dom', 301, 'https://dom.spec.whatwg.org/'],
120 | ['https://whatwg.org/domparsing', 301, 'https://domparsing.spec.whatwg.org/'],
121 | ['https://whatwg.org/dp', 301, 'https://domparsing.spec.whatwg.org/'],
122 | ['https://whatwg.org/e', 301, 'https://encoding.spec.whatwg.org/'],
123 | ['https://whatwg.org/encoding', 301, 'https://encoding.spec.whatwg.org/'],
124 | ['https://whatwg.org/f', 301, 'https://fullscreen.spec.whatwg.org/'],
125 | ['https://whatwg.org/fetch', 301, 'https://fetch.spec.whatwg.org/'],
126 | ['https://whatwg.org/fs', 301, 'https://fullscreen.spec.whatwg.org/'],
127 | ['https://whatwg.org/fullscreen', 301, 'https://fullscreen.spec.whatwg.org/'],
128 | ['https://whatwg.org/html', 301, 'https://html.spec.whatwg.org/multipage/', 'keep'],
129 | ['https://whatwg.org/html5', 301, 'https://html.spec.whatwg.org/multipage/', 'keep'],
130 | ['https://whatwg.org/images', 302, 'https://images.whatwg.org/'],
131 | ['https://whatwg.org/images/', 302, 'https://images.whatwg.org/', 'keep'],
132 | ['https://whatwg.org/issues', 410],
133 | ['https://whatwg.org/j', 301, 'https://javascript.spec.whatwg.org/'],
134 | ['https://whatwg.org/javascript', 301, 'https://javascript.spec.whatwg.org/'],
135 | ['https://whatwg.org/js', 301, 'https://javascript.spec.whatwg.org/'],
136 | ['https://whatwg.org/link-fixup.js', 301, 'https://html.spec.whatwg.org/multipage/link-fixup.js'],
137 | ['https://whatwg.org/m', 301, 'https://mimesniff.spec.whatwg.org/'],
138 | ['https://whatwg.org/mailing-list)', 301, 'https://whatwg.org/mailing-list'],
139 | ['https://whatwg.org/mailing-list', 301, 'https://lists.whatwg.org/'],
140 | ['https://whatwg.org/mailing-list.pl', 410],
141 | ['https://whatwg.org/mimesniff', 301, 'https://mimesniff.spec.whatwg.org/'],
142 | ['https://whatwg.org/n', 301, 'https://notifications.spec.whatwg.org/'],
143 | ['https://whatwg.org/newbug', 302, 'https://github.com/whatwg/html/issues/new/choose'],
144 | ['https://whatwg.org/notifications', 301, 'https://notifications.spec.whatwg.org/'],
145 | ['https://whatwg.org/pdf', 301, 'https://html.spec.whatwg.org/print.pdf'],
146 | ['https://whatwg.org/position-paper', 301, 'https://www.w3.org/2004/04/webapps-cdf-ws/papers/opera.html'],
147 | ['https://whatwg.org/q', 301, 'https://quirks.spec.whatwg.org/'],
148 | ['https://whatwg.org/quirks', 301, 'https://quirks.spec.whatwg.org/'],
149 | ['https://whatwg.org/specs', 301, 'https://spec.whatwg.org/'],
150 | ['https://whatwg.org/specs/', 301, 'https://spec.whatwg.org/'],
151 | ['https://whatwg.org/specs/foo', 404, null],
152 | ['https://whatwg.org/specs/html5', 301, 'https://html.spec.whatwg.org/multipage/', 'keep'],
153 | ['https://whatwg.org/specs/url/current-work', 301, 'https://url.spec.whatwg.org/', 'keep'],
154 | ['https://whatwg.org/specs/vocabs', 301, 'https://html.spec.whatwg.org/multipage/microdata.html', 'drop'],
155 | ['https://whatwg.org/specs/web-apps/2007-10-26/multipage/images/', 301, 'https://whatwg.org/specs/web-apps/2007-10-26/images/', 'keep'],
156 | ['https://whatwg.org/specs/web-apps/current-work', 301, 'https://html.spec.whatwg.org/'],
157 | ['https://whatwg.org/specs/web-apps/current-work/', 301, 'https://html.spec.whatwg.org/', 'keep'],
158 | ['https://whatwg.org/specs/web-apps/current-work/complete.html', 301, 'https://html.spec.whatwg.org/'],
159 | ['https://whatwg.org/specs/web-apps/current-work/complete/', 301, 'https://html.spec.whatwg.org/multipage/', 'keep'],
160 | ['https://whatwg.org/specs/web-apps/current-work/html-a4.pdf', 301, 'https://html.spec.whatwg.org/print.pdf'],
161 | ['https://whatwg.org/specs/web-apps/current-work/html-letter.pdf', 301, 'https://html.spec.whatwg.org/print.pdf'],
162 | ['https://whatwg.org/specs/web-apps/current-work/html5-a4.pdf', 301, 'https://html.spec.whatwg.org/print.pdf'],
163 | ['https://whatwg.org/specs/web-apps/current-work/html5-letter.pdf', 301, 'https://html.spec.whatwg.org/print.pdf'],
164 | ['https://whatwg.org/specs/web-apps/current-work/multipage/', 301, 'https://html.spec.whatwg.org/multipage/', 'keep'],
165 | ['https://whatwg.org/specs/web-apps/current-work/webrtc.html', 301, 'https://w3c.github.io/webrtc-pc/'],
166 | ['https://whatwg.org/specs/web-apps/current-work/websrt.html', 301, 'https://w3c.github.io/webvtt/'],
167 | ['https://whatwg.org/specs/web-apps/current-work/webvtt.html', 301, 'https://w3c.github.io/webvtt/'],
168 | ['https://whatwg.org/specs/web-apps/html5', 301, 'https://html.spec.whatwg.org/multipage/', 'keep'],
169 | ['https://whatwg.org/specs/web-forms/tests', 301, 'https://github.com/w3c/web-platform-tests', 'drop'],
170 | ['https://whatwg.org/specs/web-socket-protocol', 301, 'https://tools.ietf.org/html/rfc6455', 'drop'],
171 | ['https://whatwg.org/specs/web-workers/current-work/', 301, 'https://html.spec.whatwg.org/multipage/workers.html'],
172 | ['https://whatwg.org/u', 301, 'https://url.spec.whatwg.org/'],
173 | ['https://whatwg.org/url', 301, 'https://url.spec.whatwg.org/'],
174 | ['https://whatwg.org/wf2', 301, 'https://html.spec.whatwg.org/multipage/#forms'],
175 | ['https://whatwg.org/ws', 301, 'https://html.spec.whatwg.org/multipage/#network'],
176 | ['https://whatwg.org/ww', 301, 'https://html.spec.whatwg.org/multipage/#workers'],
177 | ['https://whatwg.org/x', 301, 'https://xhr.spec.whatwg.org/'],
178 | ['https://whatwg.org/xhr', 301, 'https://xhr.spec.whatwg.org/'],
179 | ['https://www.whatwg.org/', 301, 'https://whatwg.org/', 'keep'],
180 | ['https://xn--7ca.whatwg.org/', 301, 'https://html.spec.whatwg.org/', 'keep'],
181 | ];
182 |
183 | function test(url, status, location) {
184 | specify(url, async function() {
185 | const response = await fetch(url, { redirect: 'manual' });
186 | assert.strictEqual(response.status, status);
187 | assert.strictEqual(response.headers.get('location'), location);
188 | });
189 | }
190 |
191 | function appendFoo(url) {
192 | if (url.endsWith('/')) {
193 | return url + 'foo';
194 | }
195 | return url + '/foo';
196 | }
197 |
198 | function generateTests([url, status, location, trailing]) {
199 | test(url, status, location || null);
200 | if (trailing !== undefined) {
201 | assert(trailing === 'keep' || trailing === 'drop');
202 | test(appendFoo(url), status,
203 | trailing === 'keep' ? appendFoo(location) : location);
204 | }
205 | }
206 |
207 | describe('redirects', function() {
208 | describe('HTTP (to HTTPS)', function() {
209 | HTTP_TESTS.map(generateTests);
210 | });
211 |
212 | describe('HTTPS (the good stuff)', function() {
213 | HTTPS_TESTS.map(generateTests);
214 | });
215 | });
216 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright © WHATWG (Apple, Google, Mozilla, Microsoft).
2 |
3 | This work is licensed under a Creative Commons Attribution 4.0 International
4 | License. To the extent portions of it are incorporated into source code,
5 | such portions in the source code are licensed under the BSD 3-Clause License instead.
6 |
7 | - - - -
8 |
9 | Creative Commons Attribution 4.0 International Public License
10 |
11 | By exercising the Licensed Rights (defined below), You accept and agree
12 | to be bound by the terms and conditions of this Creative Commons
13 | Attribution 4.0 International Public License ("Public License"). To the
14 | extent this Public License may be interpreted as a contract, You are
15 | granted the Licensed Rights in consideration of Your acceptance of
16 | these terms and conditions, and the Licensor grants You such rights in
17 | consideration of benefits the Licensor receives from making the
18 | Licensed Material available under these terms and conditions.
19 |
20 |
21 | Section 1 -- Definitions.
22 |
23 | a. Adapted Material means material subject to Copyright and Similar
24 | Rights that is derived from or based upon the Licensed Material
25 | and in which the Licensed Material is translated, altered,
26 | arranged, transformed, or otherwise modified in a manner requiring
27 | permission under the Copyright and Similar Rights held by the
28 | Licensor. For purposes of this Public License, where the Licensed
29 | Material is a musical work, performance, or sound recording,
30 | Adapted Material is always produced where the Licensed Material is
31 | synched in timed relation with a moving image.
32 |
33 | b. Adapter's License means the license You apply to Your Copyright
34 | and Similar Rights in Your contributions to Adapted Material in
35 | accordance with the terms and conditions of this Public License.
36 |
37 | c. Copyright and Similar Rights means copyright and/or similar rights
38 | closely related to copyright including, without limitation,
39 | performance, broadcast, sound recording, and Sui Generis Database
40 | Rights, without regard to how the rights are labeled or
41 | categorized. For purposes of this Public License, the rights
42 | specified in Section 2(b)(1)-(2) are not Copyright and Similar
43 | Rights.
44 |
45 | d. Effective Technological Measures means those measures that, in the
46 | absence of proper authority, may not be circumvented under laws
47 | fulfilling obligations under Article 11 of the WIPO Copyright
48 | Treaty adopted on December 20, 1996, and/or similar international
49 | agreements.
50 |
51 | e. Exceptions and Limitations means fair use, fair dealing, and/or
52 | any other exception or limitation to Copyright and Similar Rights
53 | that applies to Your use of the Licensed Material.
54 |
55 | f. Licensed Material means the artistic or literary work, database,
56 | or other material to which the Licensor applied this Public
57 | License.
58 |
59 | g. Licensed Rights means the rights granted to You subject to the
60 | terms and conditions of this Public License, which are limited to
61 | all Copyright and Similar Rights that apply to Your use of the
62 | Licensed Material and that the Licensor has authority to license.
63 |
64 | h. Licensor means the individual(s) or entity(ies) granting rights
65 | under this Public License.
66 |
67 | i. Share means to provide material to the public by any means or
68 | process that requires permission under the Licensed Rights, such
69 | as reproduction, public display, public performance, distribution,
70 | dissemination, communication, or importation, and to make material
71 | available to the public including in ways that members of the
72 | public may access the material from a place and at a time
73 | individually chosen by them.
74 |
75 | j. Sui Generis Database Rights means rights other than copyright
76 | resulting from Directive 96/9/EC of the European Parliament and of
77 | the Council of 11 March 1996 on the legal protection of databases,
78 | as amended and/or succeeded, as well as other essentially
79 | equivalent rights anywhere in the world.
80 |
81 | k. You means the individual or entity exercising the Licensed Rights
82 | under this Public License. Your has a corresponding meaning.
83 |
84 |
85 | Section 2 -- Scope.
86 |
87 | a. License grant.
88 |
89 | 1. Subject to the terms and conditions of this Public License,
90 | the Licensor hereby grants You a worldwide, royalty-free,
91 | non-sublicensable, non-exclusive, irrevocable license to
92 | exercise the Licensed Rights in the Licensed Material to:
93 |
94 | a. reproduce and Share the Licensed Material, in whole or
95 | in part; and
96 |
97 | b. produce, reproduce, and Share Adapted Material.
98 |
99 | 2. Exceptions and Limitations. For the avoidance of doubt, where
100 | Exceptions and Limitations apply to Your use, this Public
101 | License does not apply, and You do not need to comply with
102 | its terms and conditions.
103 |
104 | 3. Term. The term of this Public License is specified in Section
105 | 6(a).
106 |
107 | 4. Media and formats; technical modifications allowed. The
108 | Licensor authorizes You to exercise the Licensed Rights in
109 | all media and formats whether now known or hereafter created,
110 | and to make technical modifications necessary to do so. The
111 | Licensor waives and/or agrees not to assert any right or
112 | authority to forbid You from making technical modifications
113 | necessary to exercise the Licensed Rights, including
114 | technical modifications necessary to circumvent Effective
115 | Technological Measures. For purposes of this Public License,
116 | simply making modifications authorized by this Section 2(a)
117 | (4) never produces Adapted Material.
118 |
119 | 5. Downstream recipients.
120 |
121 | a. Offer from the Licensor -- Licensed Material. Every
122 | recipient of the Licensed Material automatically
123 | receives an offer from the Licensor to exercise the
124 | Licensed Rights under the terms and conditions of this
125 | Public License.
126 |
127 | b. No downstream restrictions. You may not offer or impose
128 | any additional or different terms or conditions on, or
129 | apply any Effective Technological Measures to, the
130 | Licensed Material if doing so restricts exercise of the
131 | Licensed Rights by any recipient of the Licensed
132 | Material.
133 |
134 | 6. No endorsement. Nothing in this Public License constitutes or
135 | may be construed as permission to assert or imply that You
136 | are, or that Your use of the Licensed Material is, connected
137 | with, or sponsored, endorsed, or granted official status by,
138 | the Licensor or others designated to receive attribution as
139 | provided in Section 3(a)(1)(A)(i).
140 |
141 | b. Other rights.
142 |
143 | 1. Moral rights, such as the right of integrity, are not
144 | licensed under this Public License, nor are publicity,
145 | privacy, and/or other similar personality rights; however, to
146 | the extent possible, the Licensor waives and/or agrees not to
147 | assert any such rights held by the Licensor to the limited
148 | extent necessary to allow You to exercise the Licensed
149 | Rights, but not otherwise.
150 |
151 | 2. Patent and trademark rights are not licensed under this
152 | Public License.
153 |
154 | 3. To the extent possible, the Licensor waives any right to
155 | collect royalties from You for the exercise of the Licensed
156 | Rights, whether directly or through a collecting society
157 | under any voluntary or waivable statutory or compulsory
158 | licensing scheme. In all other cases the Licensor expressly
159 | reserves any right to collect such royalties.
160 |
161 |
162 | Section 3 -- License Conditions.
163 |
164 | Your exercise of the Licensed Rights is expressly made subject to the
165 | following conditions.
166 |
167 | a. Attribution.
168 |
169 | 1. If You Share the Licensed Material (including in modified
170 | form), You must:
171 |
172 | a. retain the following if it is supplied by the Licensor
173 | with the Licensed Material:
174 |
175 | i. identification of the creator(s) of the Licensed
176 | Material and any others designated to receive
177 | attribution, in any reasonable manner requested by
178 | the Licensor (including by pseudonym if
179 | designated);
180 |
181 | ii. a copyright notice;
182 |
183 | iii. a notice that refers to this Public License;
184 |
185 | iv. a notice that refers to the disclaimer of
186 | warranties;
187 |
188 | v. a URI or hyperlink to the Licensed Material to the
189 | extent reasonably practicable;
190 |
191 | b. indicate if You modified the Licensed Material and
192 | retain an indication of any previous modifications; and
193 |
194 | c. indicate the Licensed Material is licensed under this
195 | Public License, and include the text of, or the URI or
196 | hyperlink to, this Public License.
197 |
198 | 2. You may satisfy the conditions in Section 3(a)(1) in any
199 | reasonable manner based on the medium, means, and context in
200 | which You Share the Licensed Material. For example, it may be
201 | reasonable to satisfy the conditions by providing a URI or
202 | hyperlink to a resource that includes the required
203 | information.
204 |
205 | 3. If requested by the Licensor, You must remove any of the
206 | information required by Section 3(a)(1)(A) to the extent
207 | reasonably practicable.
208 |
209 | 4. If You Share Adapted Material You produce, the Adapter's
210 | License You apply must not prevent recipients of the Adapted
211 | Material from complying with this Public License.
212 |
213 |
214 | Section 4 -- Sui Generis Database Rights.
215 |
216 | Where the Licensed Rights include Sui Generis Database Rights that
217 | apply to Your use of the Licensed Material:
218 |
219 | a. for the avoidance of doubt, Section 2(a)(1) grants You the right
220 | to extract, reuse, reproduce, and Share all or a substantial
221 | portion of the contents of the database;
222 |
223 | b. if You include all or a substantial portion of the database
224 | contents in a database in which You have Sui Generis Database
225 | Rights, then the database in which You have Sui Generis Database
226 | Rights (but not its individual contents) is Adapted Material; and
227 |
228 | c. You must comply with the conditions in Section 3(a) if You Share
229 | all or a substantial portion of the contents of the database.
230 |
231 | For the avoidance of doubt, this Section 4 supplements and does not
232 | replace Your obligations under this Public License where the Licensed
233 | Rights include other Copyright and Similar Rights.
234 |
235 |
236 | Section 5 -- Disclaimer of Warranties and Limitation of Liability.
237 |
238 | a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
239 | EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
240 | AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
241 | ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
242 | IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
243 | WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
244 | PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
245 | ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
246 | KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
247 | ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
248 |
249 | b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
250 | TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
251 | NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
252 | INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
253 | COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
254 | USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
255 | ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
256 | DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
257 | IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
258 |
259 | c. The disclaimer of warranties and limitation of liability provided
260 | above shall be interpreted in a manner that, to the extent
261 | possible, most closely approximates an absolute disclaimer and
262 | waiver of all liability.
263 |
264 |
265 | Section 6 -- Term and Termination.
266 |
267 | a. This Public License applies for the term of the Copyright and
268 | Similar Rights licensed here. However, if You fail to comply with
269 | this Public License, then Your rights under this Public License
270 | terminate automatically.
271 |
272 | b. Where Your right to use the Licensed Material has terminated under
273 | Section 6(a), it reinstates:
274 |
275 | 1. automatically as of the date the violation is cured, provided
276 | it is cured within 30 days of Your discovery of the
277 | violation; or
278 |
279 | 2. upon express reinstatement by the Licensor.
280 |
281 | For the avoidance of doubt, this Section 6(b) does not affect any
282 | right the Licensor may have to seek remedies for Your violations
283 | of this Public License.
284 |
285 | c. For the avoidance of doubt, the Licensor may also offer the
286 | Licensed Material under separate terms or conditions or stop
287 | distributing the Licensed Material at any time; however, doing so
288 | will not terminate this Public License.
289 |
290 | d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
291 | License.
292 |
293 |
294 | Section 7 -- Other Terms and Conditions.
295 |
296 | a. The Licensor shall not be bound by any additional or different
297 | terms or conditions communicated by You unless expressly agreed.
298 |
299 | b. Any arrangements, understandings, or agreements regarding the
300 | Licensed Material not stated herein are separate from and
301 | independent of the terms and conditions of this Public License.
302 |
303 |
304 | Section 8 -- Interpretation.
305 |
306 | a. For the avoidance of doubt, this Public License does not, and
307 | shall not be interpreted to, reduce, limit, restrict, or impose
308 | conditions on any use of the Licensed Material that could lawfully
309 | be made without permission under this Public License.
310 |
311 | b. To the extent possible, if any provision of this Public License is
312 | deemed unenforceable, it shall be automatically reformed to the
313 | minimum extent necessary to make it enforceable. If the provision
314 | cannot be reformed, it shall be severed from this Public License
315 | without affecting the enforceability of the remaining terms and
316 | conditions.
317 |
318 | c. No term or condition of this Public License will be waived and no
319 | failure to comply consented to unless expressly agreed to by the
320 | Licensor.
321 |
322 | d. Nothing in this Public License constitutes or may be interpreted
323 | as a limitation upon, or waiver of, any privileges and immunities
324 | that apply to the Licensor or You, including from the legal
325 | processes of any jurisdiction or authority.
326 |
327 | - - - -
328 |
329 | BSD 3-Clause License
330 |
331 | Redistribution and use in source and binary forms, with or without
332 | modification, are permitted provided that the following conditions are met:
333 |
334 | 1. Redistributions of source code must retain the above copyright notice, this
335 | list of conditions and the following disclaimer.
336 |
337 | 2. Redistributions in binary form must reproduce the above copyright notice,
338 | this list of conditions and the following disclaimer in the documentation
339 | and/or other materials provided with the distribution.
340 |
341 | 3. Neither the name of the copyright holder nor the names of its
342 | contributors may be used to endorse or promote products derived from
343 | this software without specific prior written permission.
344 |
345 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
346 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
347 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
348 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
349 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
350 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
351 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
352 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
353 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
354 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
355 |
356 | - - - -
357 |
--------------------------------------------------------------------------------
/debian/marquee/nginx/sites/html.spec.whatwg.org.conf:
--------------------------------------------------------------------------------
1 | server {
2 | server_name html.spec.whatwg.org;
3 | root /var/www/html.spec.whatwg.org;
4 |
5 | include /etc/nginx/whatwg.conf;
6 |
7 | error_page 404 /404.html;
8 |
9 | # PDF headers
10 | location = /print.pdf {
11 | add_header Content-Disposition "inline; filename=html-standard.pdf";
12 | }
13 |
14 | ## Redirects ##
15 |
16 | # Previously-generated filenames for /multipage/ that do not redirect via script:
17 | location = /multipage/embedded-content-0.html {
18 | return 301 /multipage/embedded-content.html;
19 | }
20 | location = /multipage/scripting-1.html {
21 | return 301 /multipage/scripting.html;
22 | }
23 | location = /multipage/tabular-data.html {
24 | return 301 /multipage/tables.html;
25 | }
26 | location = /multipage/web-sockets.html {
27 | return 301 https://websockets.spec.whatwg.org/;
28 | }
29 | location = /multipage/window-object.html {
30 | return 301 /multipage/nav-history-apis.html;
31 | }
32 | location = /multipage/origin.html {
33 | return 301 /multipage/browsers.html;
34 | }
35 | location = /multipage/history.html {
36 | return 301 /multipage/browsing-the-web.html;
37 | }
38 |
39 | # Intentionally deleted previously-generated filenames for /multipage/:
40 | location = /multipage/section-sql.html {
41 | return 410;
42 | }
43 |
44 | # Images for now-deleted features:
45 | location = /images/contextmenu-collapsed.png {
46 | return 410;
47 | }
48 | location = /images/contextmenu-expanded.png {
49 | return 410;
50 | }
51 |
52 | # Images converted to svg:
53 | location = /images/content-venn.png {
54 | return 301 /images/content-venn.svg;
55 | }
56 | location = /images/parsing-model-overview.png {
57 | return 301 /images/parsing-model-overview.svg;
58 | }
59 | location = /images/sample-email-1.png {
60 | return 301 /images/sample-email-1.svg;
61 | }
62 | location = /images/sample-email-2.png {
63 | return 301 /images/sample-email-2.svg;
64 | }
65 | location = /images/sample-url.png {
66 | return 301 /images/sample-url.svg;
67 | }
68 |
69 | # Deleted demo using CGI:
70 | location ~ ^/(demos/workers/stocks/.*)$ {
71 | return 301 https://github.com/whatwg/html/tree/1332efd5e4c27ae859bf2316c6b477d77cf93716/$1;
72 | }
73 |
74 | # Misc 301 redirects:
75 | location = /complete.html {
76 | return 301 /;
77 | }
78 | location ~ ^/complete(/(.*))?$ {
79 | return 301 /$2;
80 | }
81 | location = /index {
82 | return 301 /;
83 | }
84 | location ~ ^/C(/(.*))?$ {
85 | return 301 /multipage/$2;
86 | }
87 | location = /multipage/entities.json {
88 | return 301 /entities.json;
89 | }
90 | location ~ ^/multipage/images(/(.*))?$ {
91 | return 301 /images/$2;
92 | }
93 | location = /multipage/link-fixup.js {
94 | return 301 /link-fixup.js;
95 | }
96 | location ~ ^/multipage/websockets(/(.*))?$ {
97 | return 301 https://websockets.spec.whatwg.org/$2;
98 | }
99 | location = /demos/offline/clock/clock.html {
100 | return 301 /demos/offline/clock/clock2.html;
101 | }
102 |
103 | # Mostly for redirects originating from http://w3c.github.io/html/
104 | location = /acknowledgements.html {
105 | return 301 /multipage/acknowledgements.html;
106 | }
107 | location = /a.html {
108 | return 301 /multipage/text-level-semantics.html;
109 | }
110 | location = /apis-in-html-documents.html {
111 | return 301 /multipage/dynamic-markup-insertion.html;
112 | }
113 | location = /article.html {
114 | return 301 /multipage/sections.html;
115 | }
116 | location = /association-of-controls-and-forms.html {
117 | return 301 /multipage/form-control-infrastructure.html;
118 | }
119 | location = /attributes-common-to-form-controls.html {
120 | return 301 /multipage/form-control-infrastructure.html;
121 | }
122 | location = /attributes-common-to-ins-and-del-elements.html {
123 | return 301 /multipage/edits.html;
124 | }
125 | location = /attributes-common-to-td-and-th-elements.html {
126 | return 301 /multipage/tables.html;
127 | }
128 | location = /b.html {
129 | return 301 /multipage/text-level-semantics.html;
130 | }
131 | location = /browsers.html {
132 | return 301 /multipage/browsers.html;
133 | }
134 | location = /browsing-the-web.html {
135 | return 301 /multipage/browsing-the-web.html;
136 | }
137 | location = /canvas.html {
138 | return 301 /multipage/canvas.html;
139 | }
140 | location = /changes.html {
141 | return 301 /multipage/introduction.html;
142 | }
143 | location = /commands.html {
144 | return 301 /multipage/interactive-elements.html;
145 | }
146 | location = /common-dom-interfaces.html {
147 | return 301 /multipage/common-dom-interfaces.html;
148 | }
149 | location = /common-idioms.html {
150 | return 301 /multipage/semantics-other.html;
151 | }
152 | location = /common-idioms-without-dedicated-elements.html {
153 | return 301 /multipage/semantics-other.html;
154 | }
155 | location = /common-input-element-apis.html {
156 | return 301 /multipage/input.html;
157 | }
158 | location = /common-input-element-attributes.html {
159 | return 301 /multipage/input.html;
160 | }
161 | location = /common-microsyntaxes.html {
162 | return 301 /multipage/common-microsyntaxes.html;
163 | }
164 | location = /comms.html {
165 | return 301 /multipage/comms.html;
166 | }
167 | location = /constraints.html {
168 | return 301 /multipage/form-control-infrastructure.html;
169 | }
170 | location = /content-models.html {
171 | return 301 /multipage/dom.html;
172 | }
173 | location = /converting-html-to-other-formats.html {
174 | return 301 /multipage/microdata.html;
175 | }
176 | location = /custom-elements.html {
177 | return 301 /multipage/custom-elements.html;
178 | }
179 | location = /dimension-attributes.html {
180 | return 301 /multipage/embedded-content-other.html;
181 | }
182 | location = /disabled-elements.html {
183 | return 301 /multipage/semantics-other.html;
184 | }
185 | location = /dnd.html {
186 | return 301 /multipage/dnd.html;
187 | }
188 | location = /document-metadata.html {
189 | return 301 /multipage/semantics.html;
190 | }
191 | location = /dom.html {
192 | return 301 /multipage/dom.html;
193 | }
194 | location = /dynamic-markup-insertion.html {
195 | return 301 /multipage/dynamic-markup-insertion.html;
196 | }
197 | location = /editing.html {
198 | return 301 /multipage/interaction.html;
199 | }
200 | location = /editing-apis.html {
201 | return 301 /multipage/interaction.html;
202 | }
203 | location = /edits.html {
204 | return 301 /multipage/edits.html;
205 | }
206 | location = /edits-and-lists.html {
207 | return 301 /multipage/edits.html;
208 | }
209 | location = /element-definitions.html {
210 | return 301 /multipage/dom.html;
211 | }
212 | location = /elements.html {
213 | return 301 /multipage/dom.html;
214 | }
215 | location = /embedded-content-0.html {
216 | return 301 /multipage/embedded-content.html;
217 | }
218 | location = /embedded-content-1.html {
219 | return 301 /multipage/embedded-content.html;
220 | }
221 | location = /embedded-content.html {
222 | return 301 /multipage/embedded-content.html;
223 | }
224 | location = /embedded-content-other.html {
225 | return 301 /multipage/embedded-content-other.html;
226 | }
227 | location = /form-control-infrastructure.html {
228 | return 301 /multipage/form-control-infrastructure.html;
229 | }
230 | location = /form-elements.html {
231 | return 301 /multipage/form-elements.html;
232 | }
233 | location = /form-submission.html {
234 | return 301 /multipage/form-control-infrastructure.html;
235 | }
236 | location = /forms.html {
237 | return 301 /multipage/forms.html;
238 | }
239 | location = /fullindex.html {
240 | return 301 /multipage/indices.html;
241 | }
242 | location = /global-attributes.html {
243 | return 301 /multipage/dom.html;
244 | }
245 | location = /grouping-content.html {
246 | return 301 /multipage/grouping-content.html;
247 | }
248 | location = /headings-and-sections.html {
249 | return 301 /multipage/sections.html;
250 | }
251 | location = /history.html {
252 | return 301 /multipage/browsing-the-web.html;
253 | }
254 | location = /the-hr-element.html {
255 | return 301 /multipage/grouping-content.html;
256 | }
257 | location = /iana.html {
258 | return 301 /multipage/iana.html;
259 | }
260 | location = /iana-considerations.html {
261 | return 301 /multipage/iana.html;
262 | }
263 | location = /idl-index.html {
264 | return 301 /multipage/indices.html;
265 | }
266 | location = /iframe-embed-object.html {
267 | return 301 /multipage/iframe-embed-object.html;
268 | }
269 | location = /imagebitmap-and-animations.html {
270 | return 301 /multipage/imagebitmap-and-animations.html;
271 | }
272 | location = /image-maps.html {
273 | return 301 /multipage/image-maps.html;
274 | }
275 | location = /images.html {
276 | return 301 /multipage/images.html;
277 | }
278 | location = /indices.html {
279 | return 301 /multipage/indices.html;
280 | }
281 | location = /infrastructure.html {
282 | return 301 /multipage/infrastructure.html;
283 | }
284 | location = /input.html {
285 | return 301 /multipage/input.html;
286 | }
287 | location = /interaction.html {
288 | return 301 /multipage/interaction.html;
289 | }
290 | location = /interactions-with-xpath-and-xslt.html {
291 | return 301 /multipage/infrastructure.html;
292 | }
293 | location = /interactive-elements.html {
294 | return 301 /multipage/interactive-elements.html;
295 | }
296 | location = /introduction.html {
297 | return 301 /multipage/introduction.html;
298 | }
299 | location = /links.html {
300 | return 301 /multipage/links.html;
301 | }
302 | location = /main.html {
303 | return 301 /multipage/grouping-content.html;
304 | }
305 | location = /matching-html-elements-using-selectors.html {
306 | return 301 /multipage/semantics-other.html;
307 | }
308 | location = /mathml.html {
309 | return 301 /multipage/embedded-content.html;
310 | }
311 | location = /media.html {
312 | return 301 /multipage/media.html;
313 | }
314 | location = /media-elements.html {
315 | return 301 /multipage/media.html;
316 | }
317 | location = /microdata.html {
318 | return 301 /multipage/microdata.html;
319 | }
320 | location = /microdata/master/Overview.html {
321 | return 301 /multipage/microdata.html;
322 | }
323 | location = /named-character-references.html {
324 | return 301 /multipage/named-characters.html;
325 | }
326 | location = /named-characters.html {
327 | return 301 /multipage/named-characters.html;
328 | }
329 | location = /network.html {
330 | return 301 https://websockets.spec.whatwg.org/;
331 | }
332 | location = /number-state.html {
333 | return 301 /multipage/input.html;
334 | }
335 | location = /obsolete.html {
336 | return 301 /multipage/obsolete.html;
337 | }
338 | location = /offline.html {
339 | return 301 /multipage/offline.html;
340 | }
341 | location = /origin.html {
342 | return 301 /multipage/browsers.html;
343 | }
344 | location = /origin-0.html {
345 | return 301 /multipage/browsers.html;
346 | }
347 | location = /overview.html {
348 | return 301 /multipage/;
349 | }
350 | location = /Overview.html {
351 | return 301 /multipage/;
352 | }
353 | location = /parsing.html {
354 | return 301 /multipage/parsing.html;
355 | }
356 | location = /property-index.html {
357 | return 301 /multipage/indices.html;
358 | }
359 | location = /references.html {
360 | return 301 /multipage/references.html;
361 | }
362 | location = /rendering.html {
363 | return 301 /multipage/rendering.html;
364 | }
365 | location = /requirements-relating-to-bidirectional-algorithm-formatting-characters.html {
366 | return 301 /multipage/dom.html;
367 | }
368 | location = /scripting-1.html {
369 | return 301 /multipage/scripting.html;
370 | }
371 | location = /scripting.html {
372 | return 301 /multipage/scripting.html;
373 | }
374 | location = /sec-forms.html {
375 | return 301 /multipage/forms.html;
376 | }
377 | location = /section-index.html {
378 | return 301 /multipage/indices.html;
379 | }
380 | location = /sections.html {
381 | return 301 /multipage/sections.html;
382 | }
383 | location = /selectors.html {
384 | return 301 /multipage/semantics-other.html;
385 | }
386 | location = /semantics.html {
387 | return 301 /multipage/semantics.html;
388 | }
389 | location = /semantics-embedded-content.html {
390 | return 301 /multipage/embedded-content.html;
391 | }
392 | location = /semantics-other.html {
393 | return 301 /multipage/semantics-other.html;
394 | }
395 | location = /semantics-scripting.html {
396 | return 301 /multipage/scripting.html;
397 | }
398 | location = /server-sent-events.html {
399 | return 301 /multipage/server-sent-events.html;
400 | }
401 | location = /single-page.html {
402 | return 301 /;
403 | }
404 | location = /spec.html {
405 | return 301 /multipage/;
406 | }
407 | location = /states-of-the-type-attribute.html {
408 | return 301 /multipage/input.html;
409 | }
410 | location = /structured-data.html {
411 | return 301 /multipage/structured-data.html;
412 | }
413 | location = /svg-0.html {
414 | return 301 /multipage/embedded-content.html;
415 | }
416 | location = /system-state-and-capabilities.html {
417 | return 301 /multipage/system-state.html;
418 | }
419 | location = /system-state.html {
420 | return 301 /multipage/system-state.html;
421 | }
422 | location = /syntax.html {
423 | return 301 /multipage/syntax.html;
424 | }
425 | location = /tabular-data.html {
426 | return 301 /multipage/tables.html;
427 | }
428 | location = /tables.html {
429 | return 301 /multipage/tables.html;
430 | }
431 | location = /textFieldSelection.html {
432 | return 301 /multipage/form-control-infrastructure.html;
433 | }
434 | location = /textfieldselection.html {
435 | return 301 /multipage/form-control-infrastructure.html;
436 | }
437 | location = /text-level-semantics.html {
438 | return 301 /multipage/text-level-semantics.html;
439 | }
440 | location = /textlevel-semantics.html {
441 | return 301 /multipage/text-level-semantics.html;
442 | }
443 | location = /the-a-element.html {
444 | return 301 /multipage/text-level-semantics.html;
445 | }
446 | location = /the-abbr-element.html {
447 | return 301 /multipage/text-level-semantics.html;
448 | }
449 | location = /the-address-element.html {
450 | return 301 /multipage/sections.html;
451 | }
452 | location = /the-area-element.html {
453 | return 301 /multipage/image-maps.html;
454 | }
455 | location = /the-article-element.html {
456 | return 301 /multipage/sections.html;
457 | }
458 | location = /the-aside-element.html {
459 | return 301 /multipage/sections.html;
460 | }
461 | location = /the-audio-element.html {
462 | return 301 /multipage/media.html;
463 | }
464 | location = /the-b-element.html {
465 | return 301 /multipage/text-level-semantics.html;
466 | }
467 | location = /the-base-element.html {
468 | return 301 /multipage/semantics.html;
469 | }
470 | location = /the-blockquote-element.html {
471 | return 301 /multipage/grouping-content.html;
472 | }
473 | location = /the-bdi-element.html {
474 | return 301 /multipage/text-level-semantics.html;
475 | }
476 | location = /the-bdo-element.html {
477 | return 301 /multipage/text-level-semantics.html;
478 | }
479 | location = /the-body-element.html {
480 | return 301 /multipage/sections.html;
481 | }
482 | location = /the-br-element.html {
483 | return 301 /multipage/text-level-semantics.html;
484 | }
485 | location = /the-button-element.html {
486 | return 301 /multipage/form-elements.html;
487 | }
488 | location = /the-canvas-element.html {
489 | return 301 /multipage/canvas.html;
490 | }
491 | location = /the-caption-element.html {
492 | return 301 /multipage/tables.html;
493 | }
494 | location = /the-cite-element.html {
495 | return 301 /multipage/text-level-semantics.html;
496 | }
497 | location = /the-code-element.html {
498 | return 301 /multipage/text-level-semantics.html;
499 | }
500 | location = /the-col-element.html {
501 | return 301 /multipage/tables.html;
502 | }
503 | location = /the-colgroup-element.html {
504 | return 301 /multipage/tables.html;
505 | }
506 | location = /the-command-element.html {
507 | return 301 /multipage/obsolete.html;
508 | }
509 | location = /the-datalist-element.html {
510 | return 301 /multipage/form-elements.html;
511 | }
512 | location = /the-dd-element.html {
513 | return 301 /multipage/grouping-content.html;
514 | }
515 | location = /the-del-element.html {
516 | return 301 /multipage/edits.html;
517 | }
518 | location = /the-details-element.html {
519 | return 301 /multipage/interactive-elements.html;
520 | }
521 | location = /the-div-element.html {
522 | return 301 /multipage/grouping-content.html;
523 | }
524 | location = /the-dl-element.html {
525 | return 301 /multipage/grouping-content.html;
526 | }
527 | location = /the-dfn-element.html {
528 | return 301 /multipage/text-level-semantics.html;
529 | }
530 | location = /the-dt-element.html {
531 | return 301 /multipage/grouping-content.html;
532 | }
533 | location = /the-embed-element.html {
534 | return 301 /multipage/iframe-embed-object.html;
535 | }
536 | location = /the-em-element.html {
537 | return 301 /multipage/text-level-semantics.html;
538 | }
539 | location = /the-end.html {
540 | return 301 /multipage/parsing.html;
541 | }
542 | location = /fetching-resources.html {
543 | return 301 /multipage/urls-and-fetching.html;
544 | }
545 | location = /the-fieldset-element.html {
546 | return 301 /multipage/form-elements.html;
547 | }
548 | location = /the-figcaption-element.html {
549 | return 301 /multipage/grouping-content.html;
550 | }
551 | location = /the-figure-element.html {
552 | return 301 /multipage/grouping-content.html;
553 | }
554 | location = /the-footer-element.html {
555 | return 301 /multipage/sections.html;
556 | }
557 | location = /the-form-element.html {
558 | return 301 /multipage/forms.html;
559 | }
560 | location = /the-h1-h2-h3-h4-h5-and-h6-elements.html {
561 | return 301 /multipage/sections.html;
562 | }
563 | location = /the-head-element.html {
564 | return 301 /multipage/semantics.html;
565 | }
566 | location = /the-header-element.html {
567 | return 301 /multipage/sections.html;
568 | }
569 | location = /the-hgroup-element.html {
570 | return 301 /multipage/sections.html;
571 | }
572 | location = /the-html-element.html {
573 | return 301 /multipage/semantics.html;
574 | }
575 | location = /the-i-element.html {
576 | return 301 /multipage/text-level-semantics.html;
577 | }
578 | location = /the-iframe-element.html {
579 | return 301 /multipage/iframe-embed-object.html;
580 | }
581 | location = /the-img-element.html {
582 | return 301 /multipage/embedded-content-other.html;
583 | }
584 | location = /the-input-element.html {
585 | return 301 /multipage/input.html;
586 | }
587 | location = /the-ins-element.html {
588 | return 301 /multipage/edits.html;
589 | }
590 | location = /the-kbd-element.html {
591 | return 301 /multipage/text-level-semantics.html;
592 | }
593 | location = /the-keygen-element.html {
594 | return 301 /multipage/obsolete.html;
595 | }
596 | location = /the-label-element.html {
597 | return 301 /multipage/forms.html;
598 | }
599 | location = /the-legend-element.html {
600 | return 301 /multipage/form-elements.html;
601 | }
602 | location = /the-li-element.html {
603 | return 301 /multipage/grouping-content.html;
604 | }
605 | location = /the-link-element.html {
606 | return 301 /multipage/semantics.html;
607 | }
608 | location = /the-map-element.html {
609 | return 301 /multipage/image-maps.html;
610 | }
611 | location = /the-mark-element.html {
612 | return 301 /multipage/text-level-semantics.html;
613 | }
614 | location = /the-menu-element.html {
615 | return 301 /multipage/grouping-content.html;
616 | }
617 | location = /the-meta-element.html {
618 | return 301 /multipage/semantics.html;
619 | }
620 | location = /the-meter-element.html {
621 | return 301 /multipage/form-elements.html;
622 | }
623 | location = /the-nav-element.html {
624 | return 301 /multipage/sections.html;
625 | }
626 | location = /the-noscript-element.html {
627 | return 301 /multipage/scripting.html;
628 | }
629 | location = /the-object-element.html {
630 | return 301 /multipage/iframe-embed-object.html;
631 | }
632 | location = /the-ol-element.html {
633 | return 301 /multipage/grouping-content.html;
634 | }
635 | location = /the-optgroup-element.html {
636 | return 301 /multipage/form-elements.html;
637 | }
638 | location = /the-option-element.html {
639 | return 301 /multipage/form-elements.html;
640 | }
641 | location = /the-output-element.html {
642 | return 301 /multipage/form-elements.html;
643 | }
644 | location = /the-p-element.html {
645 | return 301 /multipage/grouping-content.html;
646 | }
647 | location = /the-param-element.html {
648 | return 301 /multipage/iframe-embed-object.html;
649 | }
650 | location = /the-pre-element.html {
651 | return 301 /multipage/grouping-content.html;
652 | }
653 | location = /the-progress-element.html {
654 | return 301 /multipage/form-elements.html;
655 | }
656 | location = /the-q-element.html {
657 | return 301 /multipage/text-level-semantics.html;
658 | }
659 | location = /the-root-element.html {
660 | return 301 /multipage/semantics.html;
661 | }
662 | location = /the-rp-element.html {
663 | return 301 /multipage/text-level-semantics.html;
664 | }
665 | location = /the-rt-element.html {
666 | return 301 /multipage/text-level-semantics.html;
667 | }
668 | location = /the-ruby-element.html {
669 | return 301 /multipage/text-level-semantics.html;
670 | }
671 | location = /the-s-element.html {
672 | return 301 /multipage/text-level-semantics.html;
673 | }
674 | location = /the-samp-element.html {
675 | return 301 /multipage/text-level-semantics.html;
676 | }
677 | location = /the-script-element.html {
678 | return 301 /multipage/scripting.html;
679 | }
680 | location = /the-section-element.html {
681 | return 301 /multipage/sections.html;
682 | }
683 | location = /the-select-element.html {
684 | return 301 /multipage/form-elements.html;
685 | }
686 | location = /the-small-element.html {
687 | return 301 /multipage/text-level-semantics.html;
688 | }
689 | location = /the-source-element.html {
690 | return 301 /multipage/embedded-content.html;
691 | }
692 | location = /the-span-element.html {
693 | return 301 /multipage/text-level-semantics.html;
694 | }
695 | location = /the-strong-element.html {
696 | return 301 /multipage/text-level-semantics.html;
697 | }
698 | location = /the-style-element.html {
699 | return 301 /multipage/semantics.html;
700 | }
701 | location = /the-sub-and-sup-elements.html {
702 | return 301 /multipage/text-level-semantics.html;
703 | }
704 | location = /the-summary-element.html {
705 | return 301 /multipage/interactive-elements.html;
706 | }
707 | location = /the-tbody-element.html {
708 | return 301 /multipage/tables.html;
709 | }
710 | location = /the-textarea-element.html {
711 | return 301 /multipage/form-elements.html;
712 | }
713 | location = /the-table-element.html {
714 | return 301 /multipage/tables.html;
715 | }
716 | location = /the-td-element.html {
717 | return 301 /multipage/tables.html;
718 | }
719 | location = /the-tfoot-element.html {
720 | return 301 /multipage/tables.html;
721 | }
722 | location = /the-th-element.html {
723 | return 301 /multipage/tables.html;
724 | }
725 | location = /the-thead-element.html {
726 | return 301 /multipage/tables.html;
727 | }
728 | location = /the-time-element.html {
729 | return 301 /multipage/text-level-semantics.html;
730 | }
731 | location = /the-title-element.html {
732 | return 301 /multipage/semantics.html;
733 | }
734 | location = /the-tr-element.html {
735 | return 301 /multipage/tables.html;
736 | }
737 | location = /the-track-element.html {
738 | return 301 /multipage/media.html;
739 | }
740 | location = /the-u-element.html {
741 | return 301 /multipage/text-level-semantics.html;
742 | }
743 | location = /the-ul-element.html {
744 | return 301 /multipage/grouping-content.html;
745 | }
746 | location = /the-var-element.html {
747 | return 301 /multipage/text-level-semantics.html;
748 | }
749 | location = /the-video-element.html {
750 | return 301 /multipage/media.html;
751 | }
752 | location = /the-wbr-element.html {
753 | return 301 /multipage/text-level-semantics.html;
754 | }
755 | location = /the-xhtml-syntax.html {
756 | return 301 /multipage/xhtml.html;
757 | }
758 | location = /timers.html {
759 | return 301 /multipage/timers-and-user-prompts.html;
760 | }
761 | location = /timers-and-user-prompts.html {
762 | return 301 /multipage/timers-and-user-prompts.html;
763 | }
764 | location = /toc-status.html {
765 | return 301 /multipage/;
766 | }
767 | location = /tokenization.html {
768 | return 301 /multipage/parsing.html;
769 | }
770 | location = /tree-construction.html {
771 | return 301 /multipage/parsing.html;
772 | }
773 | location = /urls.html {
774 | return 301 /multipage/urls-and-fetching.html;
775 | }
776 | location = /urls-and-fetching.html {
777 | return 301 /multipage/urls-and-fetching.html;
778 | }
779 | location = /user-prompts.html {
780 | return 301 /multipage/user-prompts.html;
781 | }
782 | location = /video.html {
783 | return 301 /multipage/media.html;
784 | }
785 | location = /video-conferencing-and-peer-to-peer-communication.html {
786 | return 301 https://w3c.github.io/webrtc-pc/;
787 | }
788 | location = /wai-aria.html {
789 | return 301 /multipage/dom.html;
790 | }
791 | location = /webappapis.html {
792 | return 301 /multipage/webappapis.html;
793 | }
794 | location = /web-messaging.html {
795 | return 301 /multipage/web-messaging.html;
796 | }
797 | location = /web-sockets.html {
798 | return 301 https://websockets.spec.whatwg.org/;
799 | }
800 | location = /webstorage.html {
801 | return 301 /multipage/webstorage.html;
802 | }
803 | location = /window-object.html {
804 | return 301 /multipage/nav-history-apis.html;
805 | }
806 | location = /workers.html {
807 | return 301 /multipage/workers.html;
808 | }
809 | location = /xhtml.html {
810 | return 301 /multipage/xhtml.html;
811 | }
812 |
813 | # Multipage; mostly for redirects from W3C TR/html and other older forks
814 | location = /multipage/a.html {
815 | return 301 /multipage/text-level-semantics.html;
816 | }
817 | location = /multipage/a-map-element.html {
818 | return 301 /multipage/text-level-semantics.html;
819 | }
820 | location = /multipage/abbr.html {
821 | return 301 /multipage/text-level-semantics.html;
822 | }
823 | location = /multipage/acknowledgments.html {
824 | return 301 /multipage/acknowledgements.html;
825 | }
826 | location = /multipage/address.html {
827 | return 301 /multipage/sections.html;
828 | }
829 | location = /multipage/alt.html {
830 | return 301 /multipage/images.html;
831 | }
832 | location = /multipage/apis-in-html-documents.html {
833 | return 301 /multipage/dynamic-markup-insertion.html;
834 | }
835 | location = /multipage/area.html {
836 | return 301 /multipage/image-maps.html;
837 | }
838 | location = /multipage/aside.html {
839 | return 301 /multipage/sections.html;
840 | }
841 | location = /multipage/association-of-controls-and-forms.html {
842 | return 301 /multipage/form-control-infrastructure.html;
843 | }
844 | location = /multipage/attributes.html {
845 | return 301 /multipage/dom.html;
846 | }
847 | location = /multipage/attributes-common-to-form-controls.html {
848 | return 301 /multipage/form-control-infrastructure.html;
849 | }
850 | location = /multipage/attributes-common-to-td-and-th-elements.html {
851 | return 301 /multipage/tables.html;
852 | }
853 | location = /multipage/audio.html {
854 | return 301 /multipage/media.html;
855 | }
856 | location = /multipage/b.html {
857 | return 301 /multipage/text-level-semantics.html;
858 | }
859 | location = /multipage/base.html {
860 | return 301 /multipage/semantics.html;
861 | }
862 | location = /multipage/bdi.html {
863 | return 301 /multipage/text-level-semantics.html;
864 | }
865 | location = /multipage/bdo.html {
866 | return 301 /multipage/text-level-semantics.html;
867 | }
868 | location = /multipage/blockquote.html {
869 | return 301 /multipage/grouping-content.html;
870 | }
871 | location = /multipage/body.html {
872 | return 301 /multipage/sections.html;
873 | }
874 | location = /multipage/br.html {
875 | return 301 /multipage/text-level-semantics.html;
876 | }
877 | location = /multipage/button.html {
878 | return 301 /multipage/form-elements.html;
879 | }
880 | location = /multipage/button.button.html {
881 | return 301 /multipage/form-elements.html;
882 | }
883 | location = /multipage/button.reset.html {
884 | return 301 /multipage/form-elements.html;
885 | }
886 | location = /multipage/button.submit.html {
887 | return 301 /multipage/form-elements.html;
888 | }
889 | location = /multipage/caption.html {
890 | return 301 /multipage/tables.html;
891 | }
892 | location = /multipage/changes.html {
893 | return 301 /multipage/introduction.html;
894 | }
895 | location = /multipage/cite.html {
896 | return 301 /multipage/text-level-semantics.html;
897 | }
898 | location = /multipage/code.html {
899 | return 301 /multipage/text-level-semantics.html;
900 | }
901 | location = /multipage/col.html {
902 | return 301 /multipage/tables.html;
903 | }
904 | location = /multipage/colgroup.html {
905 | return 301 /multipage/tables.html;
906 | }
907 | location = /multipage/command.html {
908 | return 301 /multipage/obsolete.html;
909 | }
910 | location = /multipage/command.checkbox.html {
911 | return 301 /multipage/obsolete.html;
912 | }
913 | location = /multipage/command.command.html {
914 | return 301 /multipage/obsolete.html;
915 | }
916 | location = /multipage/command.radio.html {
917 | return 301 /multipage/obsolete.html;
918 | }
919 | location = /multipage/commands.html {
920 | return 301 /multipage/interactive-elements.html;
921 | }
922 | location = /multipage/common-idioms.html {
923 | return 301 /multipage/semantics-other.html;
924 | }
925 | location = /multipage/common-idioms-without-dedicated-elements.html {
926 | return 301 /multipage/semantics-other.html;
927 | }
928 | location = /multipage/common-input-element-apis.html {
929 | return 301 /multipage/input.html;
930 | }
931 | location = /multipage/common-input-element-attributes.html {
932 | return 301 /multipage/input.html;
933 | }
934 | location = /multipage/common-models.html {
935 | return 301 /multipage/dom.html;
936 | }
937 | location = /multipage/constraints.html {
938 | return 301 /multipage/form-control-infrastructure.html;
939 | }
940 | location = /multipage/content-models.html {
941 | return 301 /multipage/dom.html;
942 | }
943 | location = /multipage/converting-html-to-other-formats.html {
944 | return 301 /multipage/microdata.html;
945 | }
946 | location = /multipage/datalist.html {
947 | return 301 /multipage/form-elements.html;
948 | }
949 | location = /multipage/datatypes.html {
950 | return 301 /multipage/common-microsyntaxes.html;
951 | }
952 | location = /multipage/dd.html {
953 | return 301 /multipage/grouping-content.html;
954 | }
955 | location = /multipage/del.html {
956 | return 301 /multipage/edits.html;
957 | }
958 | location = /multipage/details.html {
959 | return 301 /multipage/interactive-elements.html;
960 | }
961 | location = /multipage/dfn.html {
962 | return 301 /multipage/text-level-semantics.html;
963 | }
964 | location = /multipage/dimension-attributes.html {
965 | return 301 /multipage/embedded-content-other.html;
966 | }
967 | location = /multipage/disabled-elements.html {
968 | return 301 /multipage/semantics-other.html;
969 | }
970 | location = /multipage/div.html {
971 | return 301 /multipage/grouping-content.html;
972 | }
973 | location = /multipage/document-metadata.html {
974 | return 301 /multipage/semantics.html;
975 | }
976 | location = /multipage/dl.html {
977 | return 301 /multipage/grouping-content.html;
978 | }
979 | location = /multipage/documents.html {
980 | return 301 /multipage/dom.html;
981 | }
982 | location = /multipage/dt.html {
983 | return 301 /multipage/grouping-content.html;
984 | }
985 | location = /multipage/editing.html {
986 | return 301 /multipage/interaction.html;
987 | }
988 | location = /multipage/editing-apis.html {
989 | return 301 /multipage/interaction.html;
990 | }
991 | location = /multipage/elements.html {
992 | return 301 /multipage/dom.html;
993 | }
994 | location = /multipage/elements-by-function.html {
995 | return 301 /multipage/indices.html;
996 | }
997 | location = /multipage/em.html {
998 | return 301 /multipage/text-level-semantics.html;
999 | }
1000 | location = /multipage/embed.html {
1001 | return 301 /multipage/iframe-embed-object.html;
1002 | }
1003 | location = /multipage/embedded0.html {
1004 | return 301 /multipage/embedded-content.html;
1005 | }
1006 | location = /multipage/embedded-content-1.html {
1007 | return 301 /multipage/embedded-content.html;
1008 | }
1009 | location = /multipage/fetching-resources.html {
1010 | return 301 /multipage/urls-and-fetching.html;
1011 | }
1012 | location = /multipage/fieldset.html {
1013 | return 301 /multipage/form-elements.html;
1014 | }
1015 | location = /multipage/figure.html {
1016 | return 301 /multipage/grouping-content.html;
1017 | }
1018 | location = /multipage/footer.html {
1019 | return 301 /multipage/sections.html;
1020 | }
1021 | location = /multipage/form.html {
1022 | return 301 /multipage/forms.html;
1023 | }
1024 | location = /multipage/form-submission.html {
1025 | return 301 /multipage/form-control-infrastructure.html;
1026 | }
1027 | location = /multipage/fullindex.html {
1028 | return 301 /multipage/indices.html;
1029 | }
1030 | location = /multipage/global-attributes.html {
1031 | return 301 /multipage/dom.html;
1032 | }
1033 | location = /multipage/h1.html {
1034 | return 301 /multipage/sections.html;
1035 | }
1036 | location = /multipage/h2.html {
1037 | return 301 /multipage/sections.html;
1038 | }
1039 | location = /multipage/h3.html {
1040 | return 301 /multipage/sections.html;
1041 | }
1042 | location = /multipage/h4.html {
1043 | return 301 /multipage/sections.html;
1044 | }
1045 | location = /multipage/h5.html {
1046 | return 301 /multipage/sections.html;
1047 | }
1048 | location = /multipage/h6.html {
1049 | return 301 /multipage/sections.html;
1050 | }
1051 | location = /multipage/header.html {
1052 | return 301 /multipage/sections.html;
1053 | }
1054 | location = /multipage/head.html {
1055 | return 301 /multipage/semantics.html;
1056 | }
1057 | location = /multipage/headings-and-sections.html {
1058 | return 301 /multipage/sections.html;
1059 | }
1060 | location = /multipage/hgroup.html {
1061 | return 301 /multipage/sections.html;
1062 | }
1063 | location = /multipage/hr.html {
1064 | return 301 /multipage/grouping-content.html;
1065 | }
1066 | location = /multipage/html.html {
1067 | return 301 /multipage/semantics.html;
1068 | }
1069 | location = /multipage/idl-index.html {
1070 | return 301 /multipage/indices.html;
1071 | }
1072 | location = /multipage/iframe.html {
1073 | return 301 /multipage/iframe-embed-object.html;
1074 | }
1075 | location = /multipage/imagebitmap-and-animations.html.html {
1076 | return 301 /multipage/imagebitmap-and-animations.html;
1077 | }
1078 | location = /multipage/img.html {
1079 | return 301 /multipage/embedded-content.html;
1080 | }
1081 | location = /multipage/input.button.html {
1082 | return 301 /multipage/input.html;
1083 | }
1084 | location = /multipage/input.checkbox.html {
1085 | return 301 /multipage/input.html;
1086 | }
1087 | location = /multipage/input.color.html {
1088 | return 301 /multipage/input.html;
1089 | }
1090 | location = /multipage/input.date.html {
1091 | return 301 /multipage/input.html;
1092 | }
1093 | location = /multipage/input.datetime.html {
1094 | return 301 /multipage/input.html;
1095 | }
1096 | location = /multipage/input.datetime-local.html {
1097 | return 301 /multipage/input.html;
1098 | }
1099 | location = /multipage/input.email.html {
1100 | return 301 /multipage/input.html;
1101 | }
1102 | location = /multipage/input.file.html {
1103 | return 301 /multipage/input.html;
1104 | }
1105 | location = /multipage/input.hidden.html {
1106 | return 301 /multipage/input.html;
1107 | }
1108 | location = /multipage/input.image.html {
1109 | return 301 /multipage/input.html;
1110 | }
1111 | location = /multipage/input.month.html {
1112 | return 301 /multipage/input.html;
1113 | }
1114 | location = /multipage/input.number.html {
1115 | return 301 /multipage/input.html;
1116 | }
1117 | location = /multipage/input.password.html {
1118 | return 301 /multipage/input.html;
1119 | }
1120 | location = /multipage/input.range.html {
1121 | return 301 /multipage/input.html;
1122 | }
1123 | location = /multipage/input.radio.html {
1124 | return 301 /multipage/input.html;
1125 | }
1126 | location = /multipage/input.reset.html {
1127 | return 301 /multipage/input.html;
1128 | }
1129 | location = /multipage/input.search.html {
1130 | return 301 /multipage/input.html;
1131 | }
1132 | location = /multipage/input.submit.html {
1133 | return 301 /multipage/input.html;
1134 | }
1135 | location = /multipage/input.tel.html {
1136 | return 301 /multipage/input.html;
1137 | }
1138 | location = /multipage/input.text.html {
1139 | return 301 /multipage/input.html;
1140 | }
1141 | location = /multipage/input.time.html {
1142 | return 301 /multipage/input.html;
1143 | }
1144 | location = /multipage/input.url.html {
1145 | return 301 /multipage/input.html;
1146 | }
1147 | location = /multipage/input.week.html {
1148 | return 301 /multipage/input.html;
1149 | }
1150 | location = /multipage/ins.html {
1151 | return 301 /multipage/edits.html;
1152 | }
1153 | location = /multipage/interactions-with-xpath-and-xslt.html {
1154 | return 301 /multipage/infrastructure.html;
1155 | }
1156 | location = /multipage/intro.html {
1157 | return 301 /multipage/introduction.html;
1158 | }
1159 | location = /multipage/kbd.html {
1160 | return 301 /multipage/text-level-semantics.html;
1161 | }
1162 | location = /multipage/keygen.html {
1163 | return 301 /multipage/obsolete.html;
1164 | }
1165 | location = /multipage/label.html {
1166 | return 301 /multipage/forms.html;
1167 | }
1168 | location = /multipage/legend.html {
1169 | return 301 /multipage/form-elements.html;
1170 | }
1171 | location = /multipage/li.html {
1172 | return 301 /multipage/grouping-content.html;
1173 | }
1174 | location = /multipage/link.html {
1175 | return 301 /multipage/semantics.html;
1176 | }
1177 | location = /multipage/main.html {
1178 | return 301 /multipage/grouping-content.html;
1179 | }
1180 | location = /multipage/map.html {
1181 | return 301 /multipage/image-maps.html;
1182 | }
1183 | location = /multipage/mark.html {
1184 | return 301 /multipage/text-level-semantics.html;
1185 | }
1186 | location = /multipage/matching-html-elements-using-selectors.html {
1187 | return 301 /multipage/semantics-other.html;
1188 | }
1189 | location = /multipage/mathml.html {
1190 | return 301 /multipage/embedded-content.html;
1191 | }
1192 | location = /multipage/media-elements.html {
1193 | return 301 /multipage/media.html;
1194 | }
1195 | location = /multipage/menu.html {
1196 | return 301 /multipage/grouping-content.html;
1197 | }
1198 | location = /multipage/meta.html {
1199 | return 301 /multipage/semantics.html;
1200 | }
1201 | location = /multipage/meta.charset.html {
1202 | return 301 /multipage/semantics.html;
1203 | }
1204 | location = /multipage/meta.http-equiv.content-language.html {
1205 | return 301 /multipage/semantics.html;
1206 | }
1207 | location = /multipage/meta.http-equiv.content-type.html {
1208 | return 301 /multipage/semantics.html;
1209 | }
1210 | location = /multipage/meta.http-equiv.default-style.html {
1211 | return 301 /multipage/semantics.html;
1212 | }
1213 | location = /multipage/meta.http-equiv.refresh.html {
1214 | return 301 /multipage/semantics.html;
1215 | }
1216 | location = /multipage/meta.name.html {
1217 | return 301 /multipage/semantics.html;
1218 | }
1219 | location = /multipage/meter.html {
1220 | return 301 /multipage/form-elements.html;
1221 | }
1222 | location = /multipage/multipage/obsolete.html {
1223 | return 301 /multipage/obsolete.html;
1224 | }
1225 | location = /multipage/named-character-references.html {
1226 | return 301 /multipage/named-characters.html;
1227 | }
1228 | location = /multipage/named.html {
1229 | return 301 /multipage/named-characters.html;
1230 | }
1231 | location = /multipage/nav.html {
1232 | return 301 /multipage/sections.html;
1233 | }
1234 | location = /multipage/network.html {
1235 | return 301 https://websockets.spec.whatwg.org/;
1236 | }
1237 | location = /multipage/noscript.html {
1238 | return 301 /multipage/scripting.html;
1239 | }
1240 | location = /multipage/number-state.html {
1241 | return 301 /multipage/input.html;
1242 | }
1243 | location = /multipage/object.html {
1244 | return 301 /multipage/iframe-embed-object.html;
1245 | }
1246 | location = /multipage/obsolete-features.html {
1247 | return 301 /multipage/obsolete.html;
1248 | }
1249 | location = /multipage/ol.html {
1250 | return 301 /multipage/grouping-content.html;
1251 | }
1252 | location = /multipage/optgroup.html {
1253 | return 301 /multipage/form-elements.html;
1254 | }
1255 | location = /multipage/option.html {
1256 | return 301 /multipage/form-elements.html;
1257 | }
1258 | location = /multipage/origin-0.html {
1259 | return 301 /multipage/browsers.html;
1260 | }
1261 | location = /multipage/output.html {
1262 | return 301 /multipage/form-elements.html;
1263 | }
1264 | location = /multipage/overview.html {
1265 | return 301 /multipage/;
1266 | }
1267 | location = /multipage/Overview.html {
1268 | return 301 /multipage/;
1269 | }
1270 | location = /multipage/p.html {
1271 | return 301 /multipage/grouping-content.html;
1272 | }
1273 | location = /multipage/param.html {
1274 | return 301 /multipage/iframe-embed-object.html;
1275 | }
1276 | location = /multipage/pre.html {
1277 | return 301 /multipage/grouping-content.html;
1278 | }
1279 | location = /multipage/q.html {
1280 | return 301 /multipage/text-level-semantics.html;
1281 | }
1282 | location = /multipage/progress.html {
1283 | return 301 /multipage/form-elements.html;
1284 | }
1285 | location = /multipage/property-index.html {
1286 | return 301 /multipage/indices.html;
1287 | }
1288 | location = /multipage/rp.html {
1289 | return 301 /multipage/text-level-semantics.html;
1290 | }
1291 | location = /multipage/rt.html {
1292 | return 301 /multipage/text-level-semantics.html;
1293 | }
1294 | location = /multipage/ruby.html {
1295 | return 301 /multipage/text-level-semantics.html;
1296 | }
1297 | location = /multipage/s.html {
1298 | return 301 /multipage/text-level-semantics.html;
1299 | }
1300 | location = /multipage/samp.html {
1301 | return 301 /multipage/text-level-semantics.html;
1302 | }
1303 | location = /multipage/script.html {
1304 | return 301 /multipage/scripting.html;
1305 | }
1306 | location = /multipage/sec-forms.html {
1307 | return 301 /multipage/forms.html;
1308 | }
1309 | location = /multipage/section.html {
1310 | return 301 /multipage/sections.html;
1311 | }
1312 | location = /multipage/section-browser.html {
1313 | return 301 /multipage/browsers.html;
1314 | }
1315 | location = /multipage/section-conformance.html {
1316 | return 301 /multipage/infrastructure.html;
1317 | }
1318 | location = /multipage/section-contenteditable.html {
1319 | return 301 /multipage/interaction.html;
1320 | }
1321 | location = /multipage/section-crossDocumentMessages.html {
1322 | return 301 /multipage/web-messaging.html;
1323 | }
1324 | location = /multipage/section-embedded.html {
1325 | return 301 /multipage/embedded-content.html;
1326 | }
1327 | location = /multipage/section-grouping.html {
1328 | return 301 /multipage/grouping-content.html;
1329 | }
1330 | location = /multipage/section-index.html {
1331 | return 301 /multipage/indices.html;
1332 | }
1333 | location = /multipage/section-interactive-elements.html {
1334 | return 301 /multipage/interactive-elements.html;
1335 | }
1336 | location = /multipage/section-links.html {
1337 | return 301 /multipage/links.html;
1338 | }
1339 | location = /multipage/section-origin.html {
1340 | return 301 /multipage/browsers.html;
1341 | }
1342 | location = /multipage/section-parsing.html {
1343 | return 301 /multipage/parsing.html;
1344 | }
1345 | location = /multipage/section-scripting.html {
1346 | return 301 /multipage/scripting.html;
1347 | }
1348 | location = /multipage/section-sections.html {
1349 | return 301 /multipage/sections.html;
1350 | }
1351 | location = /multipage/section-server-sent-events.html {
1352 | return 301 /multipage/server-sent-events.html;
1353 | }
1354 | location = /multipage/section-structured.html {
1355 | return 301 /multipage/structured-data.html;
1356 | }
1357 | location = /multipage/section-the-canvas.html {
1358 | return 301 /multipage/canvas.html;
1359 | }
1360 | location = /multipage/section-tree-construction.html {
1361 | return 301 /multipage/parsing.html;
1362 | }
1363 | location = /multipage/section-video.html {
1364 | return 301 /multipage/media.html;
1365 | }
1366 | location = /multipage/section-writing0.html {
1367 | return 301 /multipage/syntax.html;
1368 | }
1369 | location = /multipage/section-writing.html {
1370 | return 301 /multipage/syntax.html;
1371 | }
1372 | location = /multipage/select.html {
1373 | return 301 /multipage/form-elements.html;
1374 | }
1375 | location = /multipage/selectors.html {
1376 | return 301 /multipage/semantics-other.html;
1377 | }
1378 | location = /multipage/semantics-embedded-content.html {
1379 | return 301 /multipage/embedded-content.html;
1380 | }
1381 | location = /multipage/semantics-scripting.html {
1382 | return 301 /multipage/scripting.html;
1383 | }
1384 | location = /multipage/serializing-html-fragments.html {
1385 | return 301 /multipage/parsing.html;
1386 | }
1387 | location = /multipage/shadow-dom.html {
1388 | return 301 https://dom.spec.whatwg.org/;
1389 | }
1390 | location = /multipage/single-page.html {
1391 | return 301 /;
1392 | }
1393 | location = /multipage/span.html {
1394 | return 301 /multipage/text-level-semantics.html;
1395 | }
1396 | location = /multipage/spec.html {
1397 | return 301 /multipage/;
1398 | }
1399 | location = /multipage/small.html {
1400 | return 301 /multipage/text-level-semantics.html;
1401 | }
1402 | location = /multipage/source.html {
1403 | return 301 /multipage/embedded-content.html;
1404 | }
1405 | location = /multipage/states-of-the-type-attribute.html {
1406 | return 301 /multipage/input.html;
1407 | }
1408 | location = /multipage/strong.html {
1409 | return 301 /multipage/text-level-semantics.html;
1410 | }
1411 | location = /multipage/structured.html {
1412 | return 301 /multipage/structured-data.html;
1413 | }
1414 | location = /multipage/structured-client-side-storage.html {
1415 | return 301 /multipage/webstorage.html;
1416 | }
1417 | location = /multipage/style.html {
1418 | return 301 /multipage/semantics.html;
1419 | }
1420 | location = /multipage/sub.html {
1421 | return 301 /multipage/text-level-semantics.html;
1422 | }
1423 | location = /multipage/sup.html {
1424 | return 301 /multipage/text-level-semantics.html;
1425 | }
1426 | location = /multipage/summary.html {
1427 | return 301 /multipage/interactive-elements.html;
1428 | }
1429 | location = /multipage/system-state-and-capabilities.html {
1430 | return 301 /multipage/system-state.html;
1431 | }
1432 | location = /multipage/table.html {
1433 | return 301 /multipage/tables.html;
1434 | }
1435 | location = /multipage/tabular.html {
1436 | return 301 /multipage/tables.html;
1437 | }
1438 | location = /multipage/tbody.html {
1439 | return 301 /multipage/tables.html;
1440 | }
1441 | location = /multipage/td.html {
1442 | return 301 /multipage/tables.html;
1443 | }
1444 | location = /multipage/tfoot.html {
1445 | return 301 /multipage/tables.html;
1446 | }
1447 | location = /multipage/terminology.html {
1448 | return 301 /multipage/infrastructure.html;
1449 | }
1450 | location = /multipage/textarea.html {
1451 | return 301 /multipage/form-elements.html;
1452 | }
1453 | location = /multipage/textFieldSelection.html {
1454 | return 301 /multipage/form-control-infrastructure.html;
1455 | }
1456 | location = /multipage/textlevel-semantics.html {
1457 | return 301 /multipage/text-level-semantics.html;
1458 | }
1459 | location = /multipage/th.html {
1460 | return 301 /multipage/tables.html;
1461 | }
1462 | location = /multipage/thead.html {
1463 | return 301 /multipage/tables.html;
1464 | }
1465 | location = /multipage/the-a-element.html {
1466 | return 301 /multipage/text-level-semantics.html;
1467 | }
1468 | location = /multipage/the-abbr-element.html {
1469 | return 301 /multipage/text-level-semantics.html;
1470 | }
1471 | location = /multipage/the-article-element.html {
1472 | return 301 /multipage/sections.html;
1473 | }
1474 | location = /multipage/the-aside-element.html {
1475 | return 301 /multipage/sections.html;
1476 | }
1477 | location = /multipage/the-audio-element.html {
1478 | return 301 /multipage/media.html;
1479 | }
1480 | location = /multipage/the-b-element.html {
1481 | return 301 /multipage/text-level-semantics.html;
1482 | }
1483 | location = /multipage/the-bdi-element.html {
1484 | return 301 /multipage/text-level-semantics.html;
1485 | }
1486 | location = /multipage/the-blockquote-element.html {
1487 | return 301 /multipage/grouping-content.html;
1488 | }
1489 | location = /multipage/the-body-element.html {
1490 | return 301 /multipage/sections.html;
1491 | }
1492 | location = /multipage/the-br-element.html {
1493 | return 301 /multipage/text-level-semantics.html;
1494 | }
1495 | location = /multipage/the-button-element.html {
1496 | return 301 /multipage/form-elements.html;
1497 | }
1498 | location = /multipage/the-canvas.html {
1499 | return 301 /multipage/canvas.html;
1500 | }
1501 | location = /multipage/the-canvas-element.html {
1502 | return 301 /multipage/canvas.html;
1503 | }
1504 | location = /multipage/the-caption-element.html {
1505 | return 301 /multipage/tables.html;
1506 | }
1507 | location = /multipage/the-cite-element.html {
1508 | return 301 /multipage/text-level-semantics.html;
1509 | }
1510 | location = /multipage/the-code-element.html {
1511 | return 301 /multipage/text-level-semantics.html;
1512 | }
1513 | location = /multipage/the-command-element.html {
1514 | return 301 /multipage/obsolete.html;
1515 | }
1516 | location = /multipage/the-datalist-element.html {
1517 | return 301 /multipage/form-elements.html;
1518 | }
1519 | location = /multipage/the-dd-element.html {
1520 | return 301 /multipage/grouping-content.html;
1521 | }
1522 | location = /multipage/the-dfn-element.html {
1523 | return 301 /multipage/text-level-semantics.html;
1524 | }
1525 | location = /multipage/the-dl-element.html {
1526 | return 301 /multipage/grouping-content.html;
1527 | }
1528 | location = /multipage/the-embed-element.html {
1529 | return 301 /multipage/iframe-embed-object.html;
1530 | }
1531 | location = /multipage/the-end.html {
1532 | return 301 /multipage/parsing.html;
1533 | }
1534 | location = /multipage/the-footer-element.html {
1535 | return 301 /multipage/sections.html;
1536 | }
1537 | location = /multipage/the-form-element.html {
1538 | return 301 /multipage/forms.html;
1539 | }
1540 | location = /multipage/the-h1-h2-h3-h4-h5-and-h6-elements.html {
1541 | return 301 /multipage/sections.html;
1542 | }
1543 | location = /multipage/the-head-element.html {
1544 | return 301 /multipage/semantics.html;
1545 | }
1546 | location = /multipage/the-header-element.html {
1547 | return 301 /multipage/sections.html;
1548 | }
1549 | location = /multipage/the-hr-element.html {
1550 | return 301 /multipage/grouping-content.html;
1551 | }
1552 | location = /multipage/the-html-element.html {
1553 | return 301 /multipage/semantics.html;
1554 | }
1555 | location = /multipage/the-i-element.html {
1556 | return 301 /multipage/text-level-semantics.html;
1557 | }
1558 | location = /multipage/the-iframe-element.html {
1559 | return 301 /multipage/iframe-embed-object.html;
1560 | }
1561 | location = /multipage/the-img-element.html {
1562 | return 301 /multipage/embedded-content.html;
1563 | }
1564 | location = /multipage/the-input-element.html {
1565 | return 301 /multipage/input.html;
1566 | }
1567 | location = /multipage/the-kbd-element.html {
1568 | return 301 /multipage/text-level-semantics.html;
1569 | }
1570 | location = /multipage/the-label-element.html {
1571 | return 301 /multipage/forms.html;
1572 | }
1573 | location = /multipage/the-link-element.html {
1574 | return 301 /multipage/semantics.html;
1575 | }
1576 | location = /multipage/the-map-element.html {
1577 | return 301 /multipage/image-maps.html;
1578 | }
1579 | location = /multipage/the-mark-element.html {
1580 | return 301 /multipage/text-level-semantics.html;
1581 | }
1582 | location = /multipage/the-li-element.html {
1583 | return 301 /multipage/grouping-content.html;
1584 | }
1585 | location = /multipage/the-menu-element.html {
1586 | return 301 /multipage/grouping-content.html;
1587 | }
1588 | location = /multipage/the-meta-element.html {
1589 | return 301 /multipage/semantics.html;
1590 | }
1591 | location = /multipage/the-meter-element.html {
1592 | return 301 /multipage/form-elements.html;
1593 | }
1594 | location = /multipage/the-nav-element.html {
1595 | return 301 /multipage/sections.html;
1596 | }
1597 | location = /multipage/the-object-element.html {
1598 | return 301 /multipage/iframe-embed-object.html;
1599 | }
1600 | location = /multipage/the-optgroup-element.html {
1601 | return 301 /multipage/form-elements.html;
1602 | }
1603 | location = /multipage/the-option-element.html {
1604 | return 301 /multipage/form-elements.html;
1605 | }
1606 | location = /multipage/the-p-element.html {
1607 | return 301 /multipage/grouping-content.html;
1608 | }
1609 | location = /multipage/the-progress-element.html {
1610 | return 301 /multipage/form-elements.html;
1611 | }
1612 | location = /multipage/the-root.html {
1613 | return 301 /multipage/semantics.html;
1614 | }
1615 | location = /multipage/the-rt-element.html {
1616 | return 301 /multipage/text-level-semantics.html;
1617 | }
1618 | location = /multipage/the-ruby-element.html {
1619 | return 301 /multipage/text-level-semantics.html;
1620 | }
1621 | location = /multipage/the-samp-element.html {
1622 | return 301 /multipage/text-level-semantics.html;
1623 | }
1624 | location = /multipage/the-pre-element.html {
1625 | return 301 /multipage/grouping-content.html;
1626 | }
1627 | location = /multipage/the-script-element.html {
1628 | return 301 /multipage/scripting.html;
1629 | }
1630 | location = /multipage/the-section-element.html {
1631 | return 301 /multipage/sections.html;
1632 | }
1633 | location = /multipage/the-select-element.html {
1634 | return 301 /multipage/form-elements.html;
1635 | }
1636 | location = /multipage/the-source-element.html {
1637 | return 301 /multipage/embedded-content.html;
1638 | }
1639 | location = /multipage/the-strong-element.html {
1640 | return 301 /multipage/text-level-semantics.html;
1641 | }
1642 | location = /multipage/the-style-element.html {
1643 | return 301 /multipage/semantics.html;
1644 | }
1645 | location = /multipage/the-sub-and-sup-elements.html {
1646 | return 301 /multipage/text-level-semantics.html;
1647 | }
1648 | location = /multipage/the-table-element.html {
1649 | return 301 /multipage/tables.html;
1650 | }
1651 | location = /multipage/the-td-element.html {
1652 | return 301 /multipage/tables.html;
1653 | }
1654 | location = /multipage/the-textarea-element.html {
1655 | return 301 /multipage/form-elements.html;
1656 | }
1657 | location = /multipage/the-tfoot-element.html {
1658 | return 301 /multipage/tables.html;
1659 | }
1660 | location = /multipage/the-th-element.html {
1661 | return 301 /multipage/tables.html;
1662 | }
1663 | location = /multipage/the-time-element.html {
1664 | return 301 /multipage/text-level-semantics.html;
1665 | }
1666 | location = /multipage/the-track-element.html {
1667 | return 301 /multipage/media.html;
1668 | }
1669 | location = /multipage/the-ul-element.html {
1670 | return 301 /multipage/grouping-content.html;
1671 | }
1672 | location = /multipage/the-var-element.html {
1673 | return 301 /multipage/text-level-semantics.html;
1674 | }
1675 | location = /multipage/the-video-element.html {
1676 | return 301 /multipage/media.html;
1677 | }
1678 | location = /multipage/the-wbr-element.html {
1679 | return 301 /multipage/text-level-semantics.html;
1680 | }
1681 | location = /multipage/the-xhtml-syntax.html {
1682 | return 301 /multipage/xhtml.html;
1683 | }
1684 | location = /multipage/time.html {
1685 | return 301 /multipage/text-level-semantics.html;
1686 | }
1687 | location = /multipage/timers.html {
1688 | return 301 /multipage/timers-and-user-prompts.html;
1689 | }
1690 | location = /multipage/title.html {
1691 | return 301 /multipage/semantics.html;
1692 | }
1693 | location = /multipage/tokenization.html {
1694 | return 301 /multipage/parsing.html;
1695 | }
1696 | location = /multipage/tr.html {
1697 | return 301 /multipage/tables.html;
1698 | }
1699 | location = /multipage/track.html {
1700 | return 301 /multipage/media.html;
1701 | }
1702 | location = /multipage/tree-construction.html {
1703 | return 301 /multipage/parsing.html;
1704 | }
1705 | location = /multipage/u.html {
1706 | return 301 /multipage/text-level-semantics.html;
1707 | }
1708 | location = /multipage/ul.html {
1709 | return 301 /multipage/grouping-content.html;
1710 | }
1711 | location = /multipage/urls.html {
1712 | return 301 /multipage/urls-and-fetching.html;
1713 | }
1714 | location = /multipage/user-prompts.html {
1715 | return 301 /multipage/user-prompts.html;
1716 | }
1717 | location = /multipage/var.html {
1718 | return 301 /multipage/text-level-semantics.html;
1719 | }
1720 | location = /multipage/video.html {
1721 | return 301 /multipage/media.html;
1722 | }
1723 | location = /multipage/video-conferencing-and-peer-to-peer-communication.html {
1724 | return 301 https://w3c.github.io/webrtc-pc/;
1725 | }
1726 | location = /multipage/wai-aria.html {
1727 | return 301 /multipage/dom.html;
1728 | }
1729 | location = /multipage/wbr.html {
1730 | return 301 /multipage/text-level-semantics.html;
1731 | }
1732 |
1733 | # For redirects from http://www.w3.org/html/wg/drafts/html/CR/
1734 | location = /html/CR/browsers.html {
1735 | return 301 /multipage/browsers.html;
1736 | }
1737 | location = /html/CR/common-idioms.html {
1738 | return 301 /multipage/semantics-other.html;
1739 | }
1740 | location = /html/CR/document-metadata.html {
1741 | return 301 /multipage/semantics.html;
1742 | }
1743 | location = /html/CR/dom.html {
1744 | return 301 /multipage/dom.html;
1745 | }
1746 | location = /html/CR/embedded-content-0.html {
1747 | return 301 /multipage/embedded-content.html;
1748 | }
1749 | location = /html/CR/forms.html {
1750 | return 301 /multipage/forms.html;
1751 | }
1752 | location = /html/CR/grouping-content.html {
1753 | return 301 /multipage/grouping-content.html;
1754 | }
1755 | location = /html/CR/index.html {
1756 | return 301 /multipage/;
1757 | }
1758 | location = /html/CR/introduction.html {
1759 | return 301 /multipage/introduction.html;
1760 | }
1761 | location = /html/CR/links.html {
1762 | return 301 /multipage/links.html;
1763 | }
1764 | location = /html/CR/obsolete.html {
1765 | return 301 /multipage/obsolete.html;
1766 | }
1767 | location = /html/CR/Overview.html {
1768 | return 301 /multipage/;
1769 | }
1770 | location = /html/cr/overview.html {
1771 | return 301 /multipage/;
1772 | }
1773 | location = /html/CR/references.html {
1774 | return 301 /multipage/references.html;
1775 | }
1776 | location = /html/CR/scripting-1.html {
1777 | return 301 /multipage/scripting.html;
1778 | }
1779 | location = /html/CR/sections.html {
1780 | return 301 /multipage/sections.html;
1781 | }
1782 | location = /html/CR/single-page.html {
1783 | return 301 /;
1784 | }
1785 | location = /html/CR/syntax.html {
1786 | return 301 /multipage/syntax.html;
1787 | }
1788 | location = /html/CR/tabular-data.html {
1789 | return 301 /multipage/tables.html;
1790 | }
1791 | location = /html/CR/text-level-semantics.html {
1792 | return 301 /multipage/text-level-semantics.html;
1793 | }
1794 | location = /html/CR/textlevel-semantics.html {
1795 | return 301 /multipage/text-level-semantics.html;
1796 | }
1797 | location = /html/CR/webappapis.html {
1798 | return 301 /multipage/webappapis.html;
1799 | }
1800 |
1801 | # Developer edition
1802 | location = /dev/acknowledgments.html {
1803 | return 301 /dev/acknowledgements.html;
1804 | }
1805 | location = /dev/apis-in-html-documents.html {
1806 | return 301 /dev/dynamic-markup-insertion.html;
1807 | }
1808 | location = /dev/association-of-controls-and-forms.html {
1809 | return 301 /dev/form-control-infrastructure.html;
1810 | }
1811 | location = /dev/commands.html {
1812 | return 301 /dev/form-control-infrastructure.html;
1813 | }
1814 | location = /dev/common-input-element-attributes.html {
1815 | return 301 /dev/input.html;
1816 | }
1817 | location = /dev/content-models.html {
1818 | return 301 /dev/dom.html;
1819 | }
1820 | location = /dev/editing.html {
1821 | return 301 /dev/interaction.html;
1822 | }
1823 | location = /dev/elements.html {
1824 | return 301 /dev/dom.html;
1825 | }
1826 | location = /dev/embedded-content-1.html {
1827 | return 301 /multipage/embedded-content.html;
1828 | }
1829 | location = /dev/iana.html {
1830 | return 301 /multipage/iana.html;
1831 | }
1832 | location = /dev/named-character-references.html {
1833 | return 301 /dev/named-characters.html;
1834 | }
1835 | location = /dev/number-state.html {
1836 | return 301 /dev/number-state.html;
1837 | }
1838 | location = /dev/origin-0.html {
1839 | return 301 /dev/browsers.html;
1840 | }
1841 | location = /dev/parsing.html {
1842 | return 301 /multipage/parsing.html;
1843 | }
1844 | location = /dev/scripting-1.html {
1845 | return 301 /dev/scripting.html;
1846 | }
1847 | location = /dev/section-index.html {
1848 | return 301 /dev/indices.html;
1849 | }
1850 | location = /dev/states-of-the-type-attribute.html {
1851 | return 301 /dev/input.html;
1852 | }
1853 | location = /dev/tabular-data.html {
1854 | return 301 /dev/tables.html;
1855 | }
1856 | location = /dev/the-button-element.html {
1857 | return 301 /dev/form-elements.html;
1858 | }
1859 | location = /dev/the-canvas-element.html {
1860 | return 301 /dev/canvas.html;
1861 | }
1862 | location = /dev/the-iframe-element.html {
1863 | return 301 /dev/iframe-embed-object.html;
1864 | }
1865 | location = /dev/the-input-element.html {
1866 | return 301 /dev/input.html;
1867 | }
1868 | location = /dev/the-map-element.html {
1869 | return 301 /dev/image-maps.html;
1870 | }
1871 | location = /dev/the-video-element.html {
1872 | return 301 /dev/media.html;
1873 | }
1874 | location = /dev/the-xhtml-syntax.html {
1875 | return 301 /dev/xhtml.html;
1876 | }
1877 | location = /dev/timers.html {
1878 | return 301 /dev/timers-and-user-prompts.html;
1879 | }
1880 | location = /dev/urls.html {
1881 | return 301 /dev/urls-and-fetching.html;
1882 | }
1883 | location = /dev/video.html {
1884 | return 301 /dev/media.html;
1885 | }
1886 | location = /dev/video-conferencing-and-peer-to-peer-communication.html {
1887 | return 301 https://w3c.github.io/webrtc-pc/;
1888 | }
1889 | location = /dev/web-sockets.html {
1890 | return 301 https://websockets.spec.whatwg.org/;
1891 | }
1892 | location = /dev/window-object.html {
1893 | return 301 /dev/nav-history-apis.html;
1894 | }
1895 | location = /dev/origin.html {
1896 | return 301 /dev/browsers.html;
1897 | }
1898 | location = /dev/history.html {
1899 | return 301 /dev/browsing-the-web.html;
1900 | }
1901 | }
1902 |
--------------------------------------------------------------------------------