【问题标题】:Web app links breaking depending on final backslashWeb 应用程序链接根据最终反斜杠断开
【发布时间】:2016-06-05 13:37:37
【问题描述】:

很抱歉,如果有人问过这个问题,但我找不到它,我什至不确定我在搜索什么。

我的网络应用程序(托管在 Google 应用程序引擎上)中的 /search/ 页面上有链接,例如:

<a href="./details/">Details</a>

<a href="details/">Details</a>

只要 /search/ 有尾部反斜杠(指向 /search/details/),两者都可以工作,但如果 /search 缺少尾部反斜杠(而不是指向 /details/)则中断

把链接写成:

<a href="/search/details/">Details</a>

总是指向正确的位置,但这不起作用,因为我有一个用于搜索结果的模板,而且它们有时会出现在 /search/ 以外的页面上,并且每个页面都需要自己独特的详细信息请求处理程序。

有没有办法保证

<a href="./details/">Details</a>

语法不会中断??

感谢 deceze 的帮助,我想出了一个解决方案,即始终在我的 url 上强制使用斜杠并坚持相对结构。我重定向所有请求,不带斜杠:

('.*[^/]$', AddSlashHandler),

处理程序会这样做:

class AddSlashHandler(Handler):
    def get(self):
        if self.request.path:
            red_url = self.request.path + '/'
            if self.request.query_string:
                red_url += '?' + self.request.query_string
            self.redirect(red_url)
        else:
            self.redirect('/')

【问题讨论】:

    标签: html url href


    【解决方案1】:

    你只有两个选择:

    1. 相对路径
    2. 绝对路径

    绝对路径以/ 开头,始终是页面根目录的绝对路径;意思是/foo/bar 总是解析为http://www.example.com/foo/bar

    相对路径不以/ 开头,它们的规则有点复杂。本质上,相对路径被附加到当前 URL 中的最后一个/。如果您在 /foo,则相对 URL bar 解析为 /bar。如果您使用的是 /foo/,它会改为解析为 /foo/bar

    您可以正确处理此问题。通常在服务器端框架(PHP 等)中,您有一些函数可以正确生成指向所需位置的绝对 URL。为此目的调查 URL 路由器。由于您说您在不同的 URL 上使用相同的页面,我怀疑您在不同的上下文中重复使用相同的模板,这意味着某种服务器端组件,因此建立一个健全的 URL 处理策略应该是您的优先事项.

    【讨论】:

    • 非常感谢您的帮助。因此,如果用户不提供,我应该始终在服务器上添加尾随反斜杠?
    • 您当然应该确保您的网址一致。出于多种原因,从两个 URL 提供相同的内容并不是一个好主意。是的,简单地规范您的 URL 也是建立健全的 URL 处理的一部分。
    • 再次感谢您的提示。我在谷歌应用引擎的 python 中使用 webapp2 框架。我试图弄清楚如何自动将斜杠添加到 URL(目前通过重定向),但我无法得到它。有什么建议吗?
    • 最终重新路由了所有没有斜杠的 URL。添加解决方案的问题,再次感谢
    猜你喜欢
    • 2014-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2020-04-03
    • 2012-06-16
    相关资源
    最近更新 更多