mirror of
https://github.com/BookStackApp/BookStack.git
synced 2026-02-10 19:06:16 +03:00
Immutable (direct) link for pages #1945
Closed
opened 2026-02-05 02:16:59 +03:00 by OVERLORD
·
2 comments
No Branch/Tag Specified
development
l10n_development
release
llm_only
vectors
v25-11
docker_env
drawio_rendering
user_permissions
ldap_host_failover
svg_image
prosemirror
captcha_example
fix/video-export
v25.12.3
v25.12.2
v25.12.1
v25.12
v25.11.6
v25.11.5
v25.11.4
v24.11.4
v25.11.3
v25.11.2
v25.11.1
v25.11
v25.07.3
v25.07.2
v25.07.1
v25.07
v25.05.2
v25.05.1
v25.05
v25.02.5
v25.02.4
v25.02.3
v25.02.2
v25.02.1
v25.02
v24.12.1
v24.12
v24.10.3
v24.10.2
v24.10.1
v24.10
v24.05.4
v24.05.3
v24.05.2
v24.05.1
v24.05
v24.02.3
v24.02.2
v24.02.1
v24.02
v23.12.3
v23.12.2
v23.12.1
v23.12
v23.10.4
v23.10.3
v23.10.2
v23.10.1
v23.10
v23.08.3
v23.08.2
v23.08.1
v23.08
v23.06.2
v23.06.1
v23.06
v23.05.2
v23.05.1
v23.05
v23.02.3
v23.02.2
v23.02.1
v23.02
v23.01.1
v23.01
v22.11.1
v22.11
v22.10.2
v22.10.1
v22.10
v22.09.1
v22.09
v22.07.3
v22.07.2
v22.07.1
v22.07
v22.06.2
v22.06.1
v22.06
v22.04.2
v22.04.1
v22.04
v22.03.1
v22.03
v22.02.3
v22.02.2
v22.02.1
v22.02
v21.12.5
v21.12.4
v21.12.3
v21.12.2
v21.12.1
v21.12
v21.11.3
v21.11.2
v21.11.1
v21.11
v21.10.3
v21.10.2
v21.10.1
v21.10
v21.08.6
v21.08.5
v21.08.4
v21.08.3
v21.08.2
v21.08.1
v21.08
v21.05.4
v21.05.3
v21.05.2
v21.05.1
v21.05
v21.04.6
v21.04.5
v21.04.4
v21.04.3
v21.04.2
v21.04.1
v21.04
v0.31.8
v0.31.7
v0.31.6
v0.31.5
v0.31.4
v0.31.3
v0.31.2
v0.31.1
v0.31.0
v0.30.7
v0.30.6
v0.30.5
v0.30.4
v0.30.3
v0.30.2
v0.30.1
v0.30.0
v0.29.3
v0.29.2
v0.29.1
v0.29.0
v0.28.3
v0.28.2
v0.28.1
v0.28.0
v0.27.5
v0.27.4
v0.27.3
v0.27.2
v0.27.1
v0.27
v0.26.4
v0.26.3
v0.26.2
v0.26.1
v0.26.0
v0.25.5
v0.25.4
v0.25.3
v0.25.2
v0.25.1
v0.25.0
v0.24.3
v0.24.2
v0.24.1
v0.24.0
v0.23.2
v0.23.1
v0.23.0
v0.22.0
v0.21.0
v0.20.3
v0.20.2
v0.20.1
v0.20.0
v0.19.0
v0.18.5
v0.18.4
v0.18.3
v0.18.2
v0.18.1
v0.18.0
v0.17.4
v0.17.3
v0.17.2
v0.17.1
v0.17.0
v0.16.3
v0.16.2
v0.16.1
v0.16.0
v0.15.3
v0.15.2
v0.15.1
v0.15.0
v0.14.3
v0.14.2
v0.14.1
v0.14.0
v0.13.1
v0.13.0
v0.12.2
v0.12.1
v0.12.0
v0.11.2
v0.11.1
v0.11.0
v0.10.0
v0.9.3
v0.9.2
v0.9.1
v0.9.0
v0.8.2
v0.8.1
v0.8.0
v0.7.6
v0.7.5
v0.7.4
v0.7.3
0.7.2
v.0.7.1
v0.7.0
v0.6.3
v0.6.2
v0.6.1
v0.6.0
v0.5.0
Labels
Clear labels
🎨 Design
📖 Docs Update
🐛 Bug
🐛 Bug
:cat2:🐈 Possible duplicate
💿 Database
☕ Open to discussion
💻 Front-End
🐕 Support
🚪 Authentication
🌍 Translations
🔌 API Task
🏭 Back-End
⛲ Upstream
🔨 Feature Request
🛠️ Enhancement
🛠️ Enhancement
🛠️ Enhancement
❤️ Happy feedback
🔒 Security
🔍 Pending Validation
💆 UX
📝 WYSIWYG Editor
🌔 Out of scope
🔩 API Request
:octocat: Admin/Meta
🖌️ View Customization
❓ Question
🚀 Priority
🛡️ Blocked
🚚 Export System
♿ A11y
🔧 Maintenance
> Markdown Editor
pull-request
Mirrored from GitHub Pull Request
No Label
:cat2:🐈 Possible duplicate
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/BookStack#1945
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @Vinno97 on GitHub (Nov 17, 2020).
Describe the feature you'd like
When you create a page, its URL contains features like its title and the book that the page belongs to. However, this link can change when it or its parent book are renamed.
It would be great if we could also create URLs that are immutable and always point to a specific page.
I am thinking of a "Get Sharable URL" button, which gives you an url like
https://domain.com/ref/<page_hash>. This link can point to the same content as the full page url, or just redirect (like a TinyURL or YouTu.be).Describe the benefits this feature would bring to BookStack users
Documentation is often fluid. Titles change, sections are re-ordered, etc. With just the current implementation, links do break.
It makes it so that you cannot just share an URL and trust that the recipient can keep on using it.
One of the last things you want in your documentation is dead links. Even Bookstack's internal links can break.
Lastly, this feature can allow for a more flexible use of BookStack. Without it, I would highly discourage changing anything that might influence the URL of a page. With it, pages can evolve, books can be merged/seperated, etc., all without breaking links.
Additional context
I am currently testing how well BookStack would work in our educational instituion. Some co-workers are using it and links got shared with each-other. Now the title of one book was changed, and the pages of all URLs beneath it became invalid.
It would be pretty annoying (and likely hinder adoptation) if this kept happening too often.
You can discourage people from changing titles, but that is no real solution. Sometimes its just necessary.
Thanks for making BookStack the system that it is. It is beautiful how something like this can be open source.
I think it can be implemented in a pretty straightforward manner. Pages have unique ids. To prevent enumeration, the unique link id can be something like
hash(pageId + salt), wherehash()returns the firstncharacters of a sha256 hash. Alternatively, random hashes can be stored as an extra column in thepagestable. This way, you can also detect and prevent accidental collisions, though it may not even be necessary.I also think that internal linking (between pages) should automatically be done using these page-specific URLs.
@ssddanbrown commented on GitHub (Nov 18, 2020):
Thanks for the details request @Vinno97 along with an implementation idea.
There is currently an id-based page linking available in the platform at
/link/<page_id>. This can easily be generated by selecting some text within a section of the page, you'll get a popover box with this link format:BookStack does offer some level of old-url resolution but this can indeed break depending on the change.
When it comes to links there are many different opinions on what's important and there have been many requests over the years such as: #1969, #1781, #732, #497, #338 and many more.
I'm aware the link format needs to be improved but it will need to be done in a very considerate way that meets the requirements of most, but likely never everyone. At some-point in the future I'll look to to form a proposal for a new URL scheme for feedback. This may include a hash like suggested but will likely need more aside the hash to provide human readable context.
Since there are many existing similar requests to change URL's I'm going to close this off as a duplicate for now but I'll keep in mind your suggestions when it comes to formulating that proposal.
@avmaksimov commented on GitHub (Dec 26, 2023):
Thanks for your answer. But it's already worked with your method if I delete tage informtation and save only link's id. For example: https://kb.mysite.com/link/199 .
For the first time it will be great if somebody add a button for copy permanent link to page with ID instead of page's header.