确保链接在不在域根目录时到达正确位置的最佳方式/做法?

我一直想知道这一段时间了,但是在创建链接时(通过方法生成或者通过写入来确保在Web应用程序(RoR,Sinatra,PHP,任何内容)中的最佳方法是什么)无论你是否在某个域的根目录,他们都会到达正确的位置: http : //www.example.com/或http://www.example.com/this/is/where/the/应用程序/是/

我的想法是让最终用户在你的应用程序的配置中的某个地方指定一个文档根,然后使用它,但是我想要一个很好的方法来做到这一点,而最终用户不必配置任何东西。

编辑:最终用户,我指的是在服务器上设置应用程序的人。

编辑:我可以使用开头’/’来获取相对于域的链接,但问题是,如果应用程序本身不在根,但有些地方,如http://www.example.com/this /是/ where / / app /是/所以我想说gen_link('/')并让它返回/this/is/where/the/app/is/gen_link('/some/thing')和return /this/is/where/the/app/is/some/thing

如何尝试在html布局的头部设置base元素?
首先,获取URL,例如。 在某种程度上,伊利亚建议(如果PHP对你没问题)。 之后,您可以使用base标记,如下所示:

  

这将设置所有链接的默认URL,浏览器将其添加到页面上的每个相对链接。

首先,您需要通过某种url重写function来路由所有url。

所以你不再这样做了:

 Foo 

但相反的是:

 Foo 

所有的Web框架都有这样的function。 虽然他们通常会在那里做各种魔术(与MVC控制器路径和视图有关,但是没有),在函数结束时(概念上),他们都在你的url前面添加了一个“root”(例如"/this/is/where/the/app/is/" ),以便允许您在应用程序中创建独立于硬编码基本路径的URL。

RoR使用名为"relative_url_root"的配置指令。

Symfony(php)使用一个名为"relative_url_root"的配置指令。

CakePHP使用名为"WEBROOT_DIR"的配置指令。

如果这些框架在Apache上运行,则通常会动态计算此值(如果尚未明确设置)。 在其他Web服务器上,环境变量通常不可用或不正确,因此无法一致地确定此值。

ilya的答案很好,但我认为更简单的方法就是在所有链接之前加上前导“/”。 这将确保它们始终相对于域的根目录:

 Something  Something  

您可以自己确定所需的一切,无需配置。

这是一个PHP示例(假设index.php是您的脚本名称):

  

现在,您可以随时创建如下链接:

 Something 

另见评论中的讨论。