Web应用程序链接断开取决于最终反斜杠

时间:2016-02-23 16:00:06

标签: html url href

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

我的网页应用中有链接(在谷歌应用引擎上托管)/ search / like:

<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的帮助,我提出了一个解决方案,即始终在我的网址上强制使用尾部斜杠并坚持使用相对结构。我重定向所有请求,而不使用尾部斜杠:

('.*[^/]$', 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('/')

1 个答案:

答案 0 :(得分:2)

您只有两个选择:

  1. 相对路径
  2. 绝对路径
  3. 绝对路径以/开头,并且始终是页面根的绝对路径;含义/foo/bar始终解析为http://www.example.com/foo/bar

    相对路径不以/开头,它们的规则稍微复杂一些。实质上,相对路径会附加到当前URL中的最后/ 。如果您使用/foo,则相对网址bar会解析为/bar。如果您使用的是/foo/,则会转换为/foo/bar

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