【问题标题】:Using relative urls when using "clean urls"?使用“干净网址”时使用相对网址?
【发布时间】:2011-10-04 20:27:58
【问题描述】:

我将所有 url 请求定向到前端控制器。 url 请求类似于example.com/controller/action/etc。问题是,在程序中使用相对 url。如果 url 请求中只有一个斜杠,这可以正常工作,但如果有多个斜杠,则相对 url 会损坏。

在位置example.com/controller,相对网址other-controller 可以很好地将用户带到example.com/other-controller

在位置example.com/controller/action,相对网址other-controller 无法将用户带到example.com/controller/other-controller

关于如何解决这个问题的任何建议?希望每次我想在应用程序中创建一个 url 时,我都可以在不使用绝对路径或一些 url 生成代码的情况下做到这一点。

如果重要的话,我目前正在使用这个 .htaccess 代码将传入请求重定向到前端控制器:

# Point all to index.php except existing files
<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ /index.php/$1 [L]
</IfModule>

【问题讨论】:

    标签: php relative-path clean-urls


    【解决方案1】:

    您将需要使用绝对 URL 来执行您想要的操作,而无需查看您所在的当前路径并添加正确数量的 ..s。您不需要为每个域名设置域,您可以使用/controller/action/other-controller/action 之类的URL。这些将无缝地适用于两个控制器。一个示例锚标记:

    <a href="/controller/action">Do something!</a>
    

    作为旁注,人们通常会编写函数来生成 URL。如果你使用的是MVC框架,可能是在模型中添加一个方法,然后调用函数get_absolute_url,返回我上面提到的形式。

    【讨论】:

    • 开头的斜线网址会很好用。唯一的问题是,如果我随时将应用程序保存在子文件夹中...example.com/someapp/controller/action
    • 没错,但你也可以使用mod_rewrite :)
    猜你喜欢
    • 1970-01-01
    • 2011-06-25
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    相关资源
    最近更新 更多