Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Redirect full path to default version #4673

Closed
davidism opened this issue Sep 28, 2018 · 9 comments
Closed

Redirect full path to default version #4673

davidism opened this issue Sep 28, 2018 · 9 comments
Assignees
Labels
Bug A bug
Milestone

Comments

@davidism
Copy link

I'd like to be able to create versionless links to the documentation, for use in error messages, code comments, etc. For example, a message like see https://click.palletsprojects.com/windows for more information. I don't want to use URLs with versions because I would have to remember to modify all instances of it before releasing a new version.

Currently, only the root path redirects to the default version, other paths raise a 404. Instead, the path should be preserved and appended to the default version path on redirect.

Works:
https://click.palletsprojects.com/ -> https://click.palletsprojects.com/en/7.x/

Doesn't work, 404:
https://click.palletsprojects.com/windows -> https://click.palletsprojects.com/en/7.x/windows

I do not want to use the "latest" or "stable" versions because I would like the URLs that people land on and share to contain the actual version.

I already do this with the transitional redirects I set up from click.pocoo.org to click.palletsprojects.com. A similar approach could probably be used to extend RTD's default redirect.

location ~ ^/dev(.*)$ {
  return 301 https://click.palletsprojects.com/en/master$1;
}

location ~ ^/(\d)(.*)$ {
  return 301 https://click.palletsprojects.com/en/$1.x$2;
}

location ~ ^/latest(.*)$ {
  return 301 https://click.palletsprojects.com/en/7.x$1;
}

location / {
  return 301 https://click.palletsprojects.com/en/7.x$request_uri;
}
@stsewd
Copy link
Member

stsewd commented Oct 22, 2018

I think this is what you need #2422 (comment)

@stsewd
Copy link
Member

stsewd commented Oct 22, 2018

Although, you'll need to change the redirect on each release

@davidism
Copy link
Author

davidism commented Oct 23, 2018

An exact redirect from /$rest, or a prefix redirect from /, to /en/1.0.x works, but as a side effect it causes infinite redirects for 404s. If the page is https://itsdangerous.palletsprojects.com/en/1.0.x/signer, /signer redirects correctly, but /en/, /en/bad-version, and /en/1.0.x/bad-page all just keep getting appended and redirected. The first two shouldn't really come up, but the last one is an issue because the user sees a strange error instead of a 404.

The redirects catch too much, they should only trigger for 404s that don't already start with the /$lang/$version/ prefix being redirected to.

@davidism
Copy link
Author

I'd rather not have to update these redirects as new releases occur either, as part of the draw of moving to RTD was that we could drop our custom bots and processes for building docs.

@humitos
Copy link
Member

humitos commented Oct 23, 2018

@davidism your issue called my attention because I thought that we supported this.

I found a hacky solution, I think.

This URL,

How I did it? I created a Prefix Redirect with From URL as just /.

This brought other issues:

  • it produces an infinite redirection with trailing /, https://gh-rtd-project-a.readthedocs.io/redirect/
  • I found that leaving the From URL as empty is possible to submit and it doesn't make any sense, producing all 404 URLs to infinite redirection

From your examples,

location ~ ^/dev(.*)$ {
  return 301 https://click.palletsprojects.com/en/master$1;
}

This one can be achieved by an Exact Redirect with the $rest attribute, I think.

  • From URL: /dev/$rest
  • To URL: /en/master/

Similar Redirect can be done for this one,

location ~ ^/latest(.*)$ {
  return 301 https://click.palletsprojects.com/en/7.x$1;
}
  • From URL: /latest/$rest
  • To URL: /en/7.x/

The hacky way that I found should solve this one (although, it should be implemented in a better way),

location / {
  return 301 https://click.palletsprojects.com/en/7.x$request_uri;
}

Finally, maybe this can be achieved by

  • From URL: /$rest
  • To URL: /en/
location ~ ^/(\d)(.*)$ {
  return 301 https://click.palletsprojects.com/en/$1.x$2;
}

So, accessing /1.x/section/file.html will redirect to /en/1.x/section/file.html


I'm listing all of this here but I know it doesn't sound like a "good answer". I want to be sure that, even with a hacky way we can make this work or not. This will probably need some changes in our implementation of redirects --which is kind of complicated.

Finally, if you add a namespace in your the URLs you want to link, like /redirect-to-default-version/ and add a Prefix Redirect this will work:

https://gh-rtd-project-a.readthedocs.io/redirect-to-default-version/redirect.html

With a shorter namespace,

https://gh-rtd-project-a.readthedocs.io/r/redirect.html

So, your URLs will be in the form https://click.palletsprojects.com/r/windows

Does any of this make sense to you? 😁

@davidism
Copy link
Author

davidism commented Oct 30, 2018

Thanks, I started using prefix and exact redirects in an earlier comment. The problem with all these is that any 404 now produces an infinite redirect with a weird repeated URL. It's not end-user friendly.

@humitos
Copy link
Member

humitos commented Oct 30, 2018

The problem with all these is that any 404 now produces an infinite redirect with a weird repeated URL. It's not end-user friendly.

If that bug is fixed and just returns a 404, that would be enough for your use case?

@davidism
Copy link
Author

Yeah, I think that should cover it.

@humitos humitos self-assigned this Oct 31, 2018
@humitos humitos added the Bug A bug label Oct 31, 2018
@humitos humitos added this to the 2.9 milestone Oct 31, 2018
@humitos
Copy link
Member

humitos commented Nov 1, 2018

@davidism I merged the fix for the infinite redirect. It will be deployed soon.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bug A bug
Projects
None yet
Development

No branches or pull requests

3 participants