From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp0 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms11 with LMTPS id 2BIfI7mYAV/fUwAA0tVLHw (envelope-from ) for ; Sun, 05 Jul 2020 09:09:13 +0000 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp0 with LMTPS id xWcLH7mYAV9BQgAA1q6Kng (envelope-from ) for ; Sun, 05 Jul 2020 09:09:13 +0000 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id AF0C59401CF for ; Sun, 5 Jul 2020 09:09:12 +0000 (UTC) Received: from localhost ([::1]:34116 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1js0e5-0003dB-Vw for larch@yhetil.org; Sun, 05 Jul 2020 05:09:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39202) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1js0dy-0003cg-7L for bug-guix@gnu.org; Sun, 05 Jul 2020 05:09:02 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:48475) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1js0dx-0003Jz-UA for bug-guix@gnu.org; Sun, 05 Jul 2020 05:09:01 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1js0dx-0000p9-Oq for bug-guix@gnu.org; Sun, 05 Jul 2020 05:09:01 -0400 X-Loop: help-debbugs@gnu.org Subject: bug#26302: Deploying the =?UTF-8?Q?i18n=E2=80=99d?= web site Resent-From: "pelzflorian (Florian Pelz)" Original-Sender: "Debbugs-submit" Resent-CC: bug-guix@gnu.org Resent-Date: Sun, 05 Jul 2020 09:09:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 26302 X-GNU-PR-Package: guix X-GNU-PR-Keywords: To: 26302 <26302@debbugs.gnu.org> Received: via spool by 26302-submit@debbugs.gnu.org id=B26302.15939401043104 (code B ref 26302); Sun, 05 Jul 2020 09:09:01 +0000 Received: (at 26302) by debbugs.gnu.org; 5 Jul 2020 09:08:24 +0000 Received: from localhost ([127.0.0.1]:60021 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1js0dL-0000nz-0g for submit@debbugs.gnu.org; Sun, 05 Jul 2020 05:08:23 -0400 Received: from pelzflorian.de ([5.45.111.108]:47904 helo=mail.pelzflorian.de) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1js0dI-0000nq-F1 for 26302@debbugs.gnu.org; Sun, 05 Jul 2020 05:08:22 -0400 Received: from pelzflorian.localdomain (unknown [5.45.111.108]) by mail.pelzflorian.de (Postfix) with ESMTPSA id A503C36055C; Sun, 5 Jul 2020 11:08:18 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de; s=mail; t=1593940099; bh=FETxttAHPEKtmFKtOA4DExuF35MRuf6WVV6EZCzIAt4=; h=Date:From:To:Cc:Subject:References:In-Reply-To; b=Py7tVGuhKWGq0JcWZAXJ06d2GgBVh12hFKSDRHHrNCCp1okO+yUxAABiqlyoPsQmk BDFsRtQvOEZQwCgHMhwjGXGb6GL56Wj+ah8Kcw5W5MxVvwSVz1VDi/t0K9gmHEY9YR 2XRdB01Go8H8m21QQ19rcvHKROHzYxiIgH37C9yY= Date: Sun, 5 Jul 2020 11:08:08 +0200 From: "pelzflorian (Florian Pelz)" Message-ID: <20200705090808.7c7ihjnymo6hv7ch@pelzflorian.localdomain> References: <20191117161702.bfmuiukhyacbukqf@pelzflorian.localdomain> <87d090ibk5.fsf_-_@gnu.org> <20200325232100.ynsy7xog4vt6nq5q@pelzflorian.localdomain> <87sghf6lkv.fsf@gnu.org> <20200407220225.zlw64sywakcajvkt@pelzflorian.localdomain> <20200409032146.tm76qkrwwydfadye@pelzflorian.localdomain> <20200409074550.ecq4ltzvu27o3js3@pelzflorian.localdomain> <20200409145730.qd2nqg4gxrf4ofzw@pelzflorian.localdomain> <878sj43cja.fsf@gnu.org> <20200409173102.gaheruhtp7fg6cgg@pelzflorian.localdomain> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="jtzwqgsvir7islum" Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20200409173102.gaheruhtp7fg6cgg@pelzflorian.localdomain> X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-Spam-Score: -1.0 (-) X-BeenThere: bug-guix@gnu.org List-Id: Bug reports for GNU Guix List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Daniela Lura , sirgazil Errors-To: bug-guix-bounces+larch=yhetil.org@gnu.org Sender: "bug-Guix" X-Scanner: scn0 Authentication-Results: aspmx1.migadu.com; dkim=fail (rsa verify failed) header.d=pelzflorian.de header.s=mail header.b=Py7tVGuh; dmarc=none; spf=pass (aspmx1.migadu.com: domain of bug-guix-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=bug-guix-bounces@gnu.org X-Spam-Score: 2.49 X-TUID: 4o2DuYADxuN9 --jtzwqgsvir7islum Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit Sorry, I forgot to address the patch tracker. I wrote some hours ago: On Thu, Apr 09, 2020 at 07:31:04PM +0200, pelzflorian (Florian Pelz) wrote: > On Thu, Apr 09, 2020 at 05:27:05PM +0200, Ludovic Courtès wrote: > > Hi Florian, > > > > "pelzflorian (Florian Pelz)" skribis: > > > > > + (redirect "/news/porting-guix-and-guixsd.html" "/$lang/blog/2015/porting-guix-and-guixsd") > > > > Does that mean that /blog/2015/porting-guix-and-guixsd (without /LANG) > > will _not_ redirect to /LANG/blog/2015/porting-guix-and-guixsd? > > > > It’s important that all the current URL, without /LANG, remain valid. > > With the new test VM, not all is working. > > /news/porting-guix-and-guixsd.html fails (code 404). > > /blog/2015/porting-guix-and-guixsd fails (code 404). > > /blog/2015/porting-guix-and-guixsd fails (404). > > But /blog/2015/porting-guix-and-guixsd/ works fine. > > Well this is difficult to figure out. > > Regards, > Florian An update: The attached patch for berlin serves more but not all URLs properly when testing on a VM. I found one problem; the nginx locations for redirecting old URLs can be given a higher priority via specifying = before the location path. I am sorry for neglecting this for so long until Christopher Baines offered to help a few days ago. Now I too started investigating myself again. I cleared the browser cache, restarted nscd and tested these URLs (with a changed /etc/hosts file pointing guix.gnu.org to the VM): Still failing: http://guix.gnu.org/graphics http://guix.gnu.org/blog/2013/back-from-the-european-lisp-symposium worked before wip-i18n but stopped working. Hrm. These seem to fail but I could not properly build the manual yet: http://guix.gnu.org/manual/en/html_node/Miscellaneous-Services.html http://guix.gnu.org/manual/html_node/Power-management-Services.html The rest looks good: http://guix.gnu.org/news/timely-delivery-of-security-updates.html http://guix.gnu.org/security/ http://guix.gnu.org/blog/2016/back-from-the-gnu-hackers-meeting-2016/ http://guix.gnu.org/en/blog/2017/back-from-fosdem-2017 http://guix.gnu.org/de/blog/2016/back-from-gbcuw-2016/ works. http://guix.gnu.org/news/coming-events http://guix.gnu.org/news never worked, so it’s OK that these URLs don’t work. http://guix.gnu.org/news/ This redirect now works but did not work before wip-i18n (??). I will continue to investigate. Regards, Florian --jtzwqgsvir7islum Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="0001-berlin-Redirect-to-localized-website-by-browser-lang.patch" >From 59a82c819ff987a598f14d87ea7524f6c4451276 Mon Sep 17 00:00:00 2001 From: Florian Pelz Date: Sat, 4 Jul 2020 21:14:19 +0200 Subject: [PATCH 1/2] berlin: Redirect to localized website by browser language settings. * hydra/nginx/berlin.scm (%nginx-configuration): Load required nginx dynamic module. (%extra-content): Set $lang variable with it. (guix.gnu.org-locations): Redirect html URLs. (%berlin-servers): Rewrite to index files. (redirect): Give redirect locations highest priority. --- hydra/nginx/berlin.scm | 149 +++++++++++++++++++++++------------------ 1 file changed, 82 insertions(+), 67 deletions(-) diff --git a/hydra/nginx/berlin.scm b/hydra/nginx/berlin.scm index 8c90eb1..aa0a857 100644 --- a/hydra/nginx/berlin.scm +++ b/hydra/nginx/berlin.scm @@ -14,7 +14,7 @@ (define (redirect old new) (nginx-location-configuration - (uri old) + (uri (string-append "= " old)) ;= means highest priority (body (list (string-append "return 301 " new ";\n"))))) (define (publish-locations url) @@ -196,72 +196,72 @@ PUBLISH-URL." ;; available at gnu.org/s/guix--e.g., ;; . (redirect "/news/feed.xml" "/feeds/blog.atom") - (redirect "/news/porting-guix-and-guixsd.html" "/blog/2015/porting-guix-and-guixsd") - (redirect "/news/gnu-guix-welcomes-three-students-for-gsoc.html" "/blog/2015/gnu-guix-welcomes-three-students-for-gsoc") - (redirect "/news/gnu-guix-recruits-for-gsoc.html" "/blog/2015/gnu-guix-recruits-for-gsoc") - (redirect "/news/one-week-to-fosdem.html" "/blog/2014/one-week-to-fosdem") - (redirect "/news/gnu-dmd-02-released.html" "/blog/2014/gnu-dmd-02-released") - (redirect "/news/emacs-as-a-general-purpose-package-manager.html" "/blog/2014/emacs-as-a-general-purpose-package-manager") - (redirect "/news/join-gnu-guix-for-gsoc-2017.html" "/blog/2017/join-gnu-guix-for-gsoc-2017") - (redirect "/news/gnu-guix-05-released.html" "/blog/2013/gnu-guix-05-released") - (redirect "/news/guix-at-the-2014-gnu-hackers-meeting.html" "/blog/2014/guix-at-the-2014-gnu-hackers-meeting") - (redirect "/news/state-of-aarch64-on-guix.html" "/blog/2017/state-of-aarch64-on-guix") - (redirect "/news/coming-events.html" "/blog/2017/coming-events") - (redirect "/news/gnu-dmd-01-released.html" "/blog/2013/gnu-dmd-01-released") - (redirect "/news/announcing-guix-hpc.html" "/blog/2017/announcing-guix-hpc") - (redirect "/news/gnu-guix-looks-for-gsoc-students.html" "/blog/2014/gnu-guix-looks-for-gsoc-students") - (redirect "/news/guix-at-the-european-lisp-symposium.html" "/blog/2013/guix-at-the-european-lisp-symposium") - (redirect "/news/gnu-guix-08-released.html" "/blog/2014/gnu-guix-08-released") - (redirect "/news/gnu-guix-090-released.html" "/blog/2015/gnu-guix-090-released") - (redirect "/news/index.html" "/blog/") - (redirect "/news/gnu-guix-welcomes-four-students-for-gsoc.html" "/blog/2016/gnu-guix-welcomes-four-students-for-gsoc") - (redirect "/news/gnu-guix-081-released.html" "/blog/2015/gnu-guix-081-released") - (redirect "/news/timely-delivery-of-security-updates.html" "/blog/2016/timely-delivery-of-security-updates") - (redirect "/news/guix-at-openbio-codefest-2014.html" "/blog/2014/guix-at-openbio-codefest-2014") - (redirect "/news/gnu-guix-talk-in-boston-ma-usa-on-january-20th.html" "/blog/2016/gnu-guix-talk-in-boston-ma-usa-on-january-20th") - (redirect "/news/gnu-guix-at-fosdem.html" "/blog/2015/gnu-guix-at-fosdem") - (redirect "/news/gnu-guix-082-released.html" "/blog/2015/gnu-guix-082-released") - (redirect "/news/chris-webber-talks-about-guix-in-chicago-september-30th.html" "/blog/2015/chris-webber-talks-about-guix-in-chicago-september-30th") - (redirect "/news/back-from-the-gnu-hackers-meeting.html" "/blog/2013/back-from-the-gnu-hackers-meeting") - (redirect "/news/reproducible-build-summit-2nd-edition.html" "/blog/2016/reproducible-build-summit-2nd-edition") - (redirect "/news/gnu-guix-talk-in-rennes-france-november-9th.html" "/blog/2015/gnu-guix-talk-in-rennes-france-november-9th") - (redirect "/news/gnu-guix-01-released.html" "/blog/2013/gnu-guix-01-released") - (redirect "/news/guix-tox-talk-at-pyconfr-october-17th.html" "/blog/2015/guix-tox-talk-at-pyconfr-october-17th") - (redirect "/news/gnu-guix-and-guixsd-0.13.0-released.html" "/blog/2017/gnu-guix-and-guixsd-0.13.0-released") - (redirect "/news/guix-gets-cross-compilation-support.html" "/blog/2013/guix-gets-cross-compilation-support") - (redirect "/news/gnu-guix-06-released.html" "/blog/2014/gnu-guix-06-released") - (redirect "/news/meet-guix-at-fosdem.html" "/blog/2016/meet-guix-at-fosdem") - (redirect "/news/reproducible-and-user-controlled-software-environments-in-hpc-with-guix.html" "/blog/2015/reproducible-and-user-controlled-software-environments-in-hpc-with-guix") - (redirect "/news/container-provisioning-with-guix.html" "/blog/2015/container-provisioning-with-guix") - (redirect "/news/guixsd-system-tests.html" "/blog/2016/guixsd-system-tests") - (redirect "/news/gnu-guix--guixsd-0100-released.html" "/blog/2016/gnu-guix--guixsd-0100-released") - (redirect "/news/gnu-guix-and-guixsd-0110-released.html" "/blog/2016/gnu-guix-and-guixsd-0110-released") - (redirect "/news/boot-to-guile.html" "/blog/2013/boot-to-guile") - (redirect "/news/gnu-guix-talk-at-opentechsummit-berlin-may-14th.html" "/blog/2015/gnu-guix-talk-at-opentechsummit-berlin-may-14th") - (redirect "/news/running-system-services-in-containers.html" "/blog/2017/running-system-services-in-containers") - (redirect "/news/growing-our-build-farm.html" "/blog/2016/growing-our-build-farm") - (redirect "/news/distro-of-the-linux-based-gnu-system-ported-to-mips.html" "/blog/2013/distro-of-the-linux-based-gnu-system-ported-to-mips") - (redirect "/news/guix-at-libreplanet-2016.html" "/blog/2016/guix-at-libreplanet-2016") - (redirect "/news/guix--gsoc.html" "/blog/2013/guix--gsoc") - (redirect "/news/service-composition-in-guixsd.html" "/blog/2015/service-composition-in-guixsd") - (redirect "/news/creating-bundles-with-guix-pack.html" "/blog/2017/creating-bundles-with-guix-pack") - (redirect "/news/back-from-the-european-lisp-symposium.html" "/blog/2013/back-from-the-european-lisp-symposium") - (redirect "/news/gnu-guix-04-released-happy-birthday-gnu.html" "/blog/2013/gnu-guix-04-released-happy-birthday-gnu") - (redirect "/news/reproducible-builds-a-status-update.html" "/blog/2017/reproducible-builds-a-status-update") - (redirect "/news/gnu-guix-083-released.html" "/blog/2015/gnu-guix-083-released") - (redirect "/news/join-gnu-guix-for-gsoc.html" "/blog/2016/join-gnu-guix-for-gsoc") - (redirect "/news/gnu-guix-and-guixsd-0120-released.html" "/blog/2016/gnu-guix-and-guixsd-0120-released") - (redirect "/news/meet-guix-at-fosdem-2017.html" "/blog/2017/meet-guix-at-fosdem-2017") - (redirect "/news/join-guix-for-an-on-line-hackathon-on-sep-28-29.html" "/blog/2013/join-guix-for-an-on-line-hackathon-on-sep-28-29") - (redirect "/news/gnome-in-guixsd.html" "/blog/2016/gnome-in-guixsd") - (redirect "/news/introducing-guix-a-package-manager-and-distro-for-gnu.html" "/blog/2012/introducing-guix-a-package-manager-and-distro-for-gnu") - (redirect "/news/gnu-guix-03-released.html" "/blog/2013/gnu-guix-03-released") - (redirect "/news/gnu-guix-07-released.html" "/blog/2014/gnu-guix-07-released") - (redirect "/news/gsoc-update.html" "/blog/2015/gsoc-update") - (redirect "/news/gnu-guix-02-released.html" "/blog/2013/gnu-guix-02-released") - (redirect "/news/guix-starts-fundraising-campaign-with-support-from-the-fsf.html" "/blog/2015/guix-starts-fundraising-campaign-with-support-from-the-fsf") - (redirect "/news/gnu-guix-ported-to-arm-and-other-niceties-of-the-new-year.html" "/blog/2015/gnu-guix-ported-to-arm-and-other-niceties-of-the-new-year") - (redirect "/news/reproducible-builds-a-means-to-an-end.html" "/blog/2015/reproducible-builds-a-means-to-an-end") + (redirect "/news/porting-guix-and-guixsd.html" "/$lang/blog/2015/porting-guix-and-guixsd") + (redirect "/news/gnu-guix-welcomes-three-students-for-gsoc.html" "/$lang/blog/2015/gnu-guix-welcomes-three-students-for-gsoc") + (redirect "/news/gnu-guix-recruits-for-gsoc.html" "/$lang/blog/2015/gnu-guix-recruits-for-gsoc") + (redirect "/news/one-week-to-fosdem.html" "/$lang/blog/2014/one-week-to-fosdem") + (redirect "/news/gnu-dmd-02-released.html" "/$lang/blog/2014/gnu-dmd-02-released") + (redirect "/news/emacs-as-a-general-purpose-package-manager.html" "/$lang/blog/2014/emacs-as-a-general-purpose-package-manager") + (redirect "/news/join-gnu-guix-for-gsoc-2017.html" "/$lang/blog/2017/join-gnu-guix-for-gsoc-2017") + (redirect "/news/gnu-guix-05-released.html" "/$lang/blog/2013/gnu-guix-05-released") + (redirect "/news/guix-at-the-2014-gnu-hackers-meeting.html" "/$lang/blog/2014/guix-at-the-2014-gnu-hackers-meeting") + (redirect "/news/state-of-aarch64-on-guix.html" "/$lang/blog/2017/state-of-aarch64-on-guix") + (redirect "/news/coming-events.html" "/$lang/blog/2017/coming-events") + (redirect "/news/gnu-dmd-01-released.html" "/$lang/blog/2013/gnu-dmd-01-released") + (redirect "/news/announcing-guix-hpc.html" "/$lang/blog/2017/announcing-guix-hpc") + (redirect "/news/gnu-guix-looks-for-gsoc-students.html" "/$lang/blog/2014/gnu-guix-looks-for-gsoc-students") + (redirect "/news/guix-at-the-european-lisp-symposium.html" "/$lang/blog/2013/guix-at-the-european-lisp-symposium") + (redirect "/news/gnu-guix-08-released.html" "/$lang/blog/2014/gnu-guix-08-released") + (redirect "/news/gnu-guix-090-released.html" "/$lang/blog/2015/gnu-guix-090-released") + (redirect "/news/index.html" "/$lang/blog/") + (redirect "/news/gnu-guix-welcomes-four-students-for-gsoc.html" "/$lang/blog/2016/gnu-guix-welcomes-four-students-for-gsoc") + (redirect "/news/gnu-guix-081-released.html" "/$lang/blog/2015/gnu-guix-081-released") + (redirect "/news/timely-delivery-of-security-updates.html" "/$lang/blog/2016/timely-delivery-of-security-updates") + (redirect "/news/guix-at-openbio-codefest-2014.html" "/$lang/blog/2014/guix-at-openbio-codefest-2014") + (redirect "/news/gnu-guix-talk-in-boston-ma-usa-on-january-20th.html" "/$lang/blog/2016/gnu-guix-talk-in-boston-ma-usa-on-january-20th") + (redirect "/news/gnu-guix-at-fosdem.html" "/$lang/blog/2015/gnu-guix-at-fosdem") + (redirect "/news/gnu-guix-082-released.html" "/$lang/blog/2015/gnu-guix-082-released") + (redirect "/news/chris-webber-talks-about-guix-in-chicago-september-30th.html" "/$lang/blog/2015/chris-webber-talks-about-guix-in-chicago-september-30th") + (redirect "/news/back-from-the-gnu-hackers-meeting.html" "/$lang/blog/2013/back-from-the-gnu-hackers-meeting") + (redirect "/news/reproducible-build-summit-2nd-edition.html" "/$lang/blog/2016/reproducible-build-summit-2nd-edition") + (redirect "/news/gnu-guix-talk-in-rennes-france-november-9th.html" "/$lang/blog/2015/gnu-guix-talk-in-rennes-france-november-9th") + (redirect "/news/gnu-guix-01-released.html" "/$lang/blog/2013/gnu-guix-01-released") + (redirect "/news/guix-tox-talk-at-pyconfr-october-17th.html" "/$lang/blog/2015/guix-tox-talk-at-pyconfr-october-17th") + (redirect "/news/gnu-guix-and-guixsd-0.13.0-released.html" "/$lang/blog/2017/gnu-guix-and-guixsd-0.13.0-released") + (redirect "/news/guix-gets-cross-compilation-support.html" "/$lang/blog/2013/guix-gets-cross-compilation-support") + (redirect "/news/gnu-guix-06-released.html" "/$lang/blog/2014/gnu-guix-06-released") + (redirect "/news/meet-guix-at-fosdem.html" "/$lang/blog/2016/meet-guix-at-fosdem") + (redirect "/news/reproducible-and-user-controlled-software-environments-in-hpc-with-guix.html" "/$lang/blog/2015/reproducible-and-user-controlled-software-environments-in-hpc-with-guix") + (redirect "/news/container-provisioning-with-guix.html" "/$lang/blog/2015/container-provisioning-with-guix") + (redirect "/news/guixsd-system-tests.html" "/$lang/blog/2016/guixsd-system-tests") + (redirect "/news/gnu-guix--guixsd-0100-released.html" "/$lang/blog/2016/gnu-guix--guixsd-0100-released") + (redirect "/news/gnu-guix-and-guixsd-0110-released.html" "/$lang/blog/2016/gnu-guix-and-guixsd-0110-released") + (redirect "/news/boot-to-guile.html" "/$lang/blog/2013/boot-to-guile") + (redirect "/news/gnu-guix-talk-at-opentechsummit-berlin-may-14th.html" "/$lang/blog/2015/gnu-guix-talk-at-opentechsummit-berlin-may-14th") + (redirect "/news/running-system-services-in-containers.html" "/$lang/blog/2017/running-system-services-in-containers") + (redirect "/news/growing-our-build-farm.html" "/$lang/blog/2016/growing-our-build-farm") + (redirect "/news/distro-of-the-linux-based-gnu-system-ported-to-mips.html" "/$lang/blog/2013/distro-of-the-linux-based-gnu-system-ported-to-mips") + (redirect "/news/guix-at-libreplanet-2016.html" "/$lang/blog/2016/guix-at-libreplanet-2016") + (redirect "/news/guix--gsoc.html" "/$lang/blog/2013/guix--gsoc") + (redirect "/news/service-composition-in-guixsd.html" "/$lang/blog/2015/service-composition-in-guixsd") + (redirect "/news/creating-bundles-with-guix-pack.html" "/$lang/blog/2017/creating-bundles-with-guix-pack") + (redirect "/news/back-from-the-european-lisp-symposium.html" "/$lang/blog/2013/back-from-the-european-lisp-symposium") + (redirect "/news/gnu-guix-04-released-happy-birthday-gnu.html" "/$lang/blog/2013/gnu-guix-04-released-happy-birthday-gnu") + (redirect "/news/reproducible-builds-a-status-update.html" "/$lang/blog/2017/reproducible-builds-a-status-update") + (redirect "/news/gnu-guix-083-released.html" "/$lang/blog/2015/gnu-guix-083-released") + (redirect "/news/join-gnu-guix-for-gsoc.html" "/$lang/blog/2016/join-gnu-guix-for-gsoc") + (redirect "/news/gnu-guix-and-guixsd-0120-released.html" "/$lang/blog/2016/gnu-guix-and-guixsd-0120-released") + (redirect "/news/meet-guix-at-fosdem-2017.html" "/$lang/blog/2017/meet-guix-at-fosdem-2017") + (redirect "/news/join-guix-for-an-on-line-hackathon-on-sep-28-29.html" "/$lang/blog/2013/join-guix-for-an-on-line-hackathon-on-sep-28-29") + (redirect "/news/gnome-in-guixsd.html" "/$lang/blog/2016/gnome-in-guixsd") + (redirect "/news/introducing-guix-a-package-manager-and-distro-for-gnu.html" "/$lang/blog/2012/introducing-guix-a-package-manager-and-distro-for-gnu") + (redirect "/news/gnu-guix-03-released.html" "/$lang/blog/2013/gnu-guix-03-released") + (redirect "/news/gnu-guix-07-released.html" "/$lang/blog/2014/gnu-guix-07-released") + (redirect "/news/gsoc-update.html" "/$lang/blog/2015/gsoc-update") + (redirect "/news/gnu-guix-02-released.html" "/$lang/blog/2013/gnu-guix-02-released") + (redirect "/news/guix-starts-fundraising-campaign-with-support-from-the-fsf.html" "/$lang/blog/2015/guix-starts-fundraising-campaign-with-support-from-the-fsf") + (redirect "/news/gnu-guix-ported-to-arm-and-other-niceties-of-the-new-year.html" "/$lang/blog/2015/gnu-guix-ported-to-arm-and-other-niceties-of-the-new-year") + (redirect "/news/reproducible-builds-a-means-to-an-end.html" "/$lang/blog/2015/reproducible-builds-a-means-to-an-end") (redirect "/manual/html_node/Substitutes.html" "../en/html_node/Substitutes.html") (redirect "/manual/html_node/GNU-Free-Documentation-License.html" "../en/html_node/GNU-Free-Documentation-License.html") (redirect "/manual/html_node/The-Store-Monad.html" "../en/html_node/The-Store-Monad.html") @@ -468,6 +468,10 @@ PUBLISH-URL." (uri "/guix") (body (list "root /var/www;"))) + (nginx-location-configuration + (uri "~ (.html|.htm)$") + (body (list "try_files $uri /$lang/$uri /$lang/$uri/index.html =404;"))) + (nginx-location-configuration ;certbot (uri "/.well-known") (body (list "root /var/www;"))))) @@ -521,6 +525,7 @@ PUBLISH-URL." "if_modified_since off;" "etag off;" + "rewrite (.*)/$ $1/index.html;" "access_log /var/log/nginx/guix-info.access.log;"))) (nginx-server-configuration @@ -532,6 +537,7 @@ PUBLISH-URL." (append %tls-settings (list + "rewrite (.*)/$ $1/index.html;" "access_log /var/log/nginx/guix-info.https.access.log;")))) (nginx-server-configuration @@ -628,6 +634,7 @@ PUBLISH-URL." (append %tls-settings (list + "rewrite (.*)/$ $1/index.html;" "access_log /var/log/nginx/guix-info.https.access.log;")))) (nginx-server-configuration @@ -648,6 +655,7 @@ PUBLISH-URL." "if_modified_since off;" "etag off;" + "rewrite (.*)/$ $1/index.html;" "access_log /var/log/nginx/guix-gnu-org.https.access.log;")))) (nginx-server-configuration @@ -731,6 +739,8 @@ PUBLISH-URL." "default_type application/octet-stream;" "sendfile on;" + "set_from_accept_language $lang en de;" + ;; Maximum chunk size to send. Partly this is a workaround for ;; , but also the nginx docs mention that ;; "Without the limit, one fast connection may seize the worker @@ -789,6 +799,11 @@ PUBLISH-URL." (define %nginx-configuration (nginx-configuration (server-blocks %berlin-servers) + (modules + (list + ;; Module to redirect users to the localized pages of their choice. + (file-append nginx-accept-language-module + "/etc/nginx/modules/ngx_http_accept_language_module.so"))) (global-directives ;; This is a 72-core machine, but let's not use all of them for nginx. '((worker_processes . 16) -- 2.26.2 --jtzwqgsvir7islum--