4

假设我的页面 URL 是:http://example.com/path/to/dir/index.html

我通过以下方式代理此页面:http://proxyserver.com/path/to/dir/index.html。同样,我希望页面中的所有相对 URL 都由proxyserver.com而不是example.com. 什么应该是正确的<base>href 值?

我想要页面上的相对 URL,例如

  • newfile.html解决http://proxyserver.com/path/to/dir/newfile.html
  • /newfile.html解决http://proxyserver.com/newfile.html
  • #hash解决http://proxyserver.com/path/to/dir/file.html#hash

在页面中设置<base href="" />正确地完成了这项工作,但它有一些含义吗?跨浏览器是否有不同的解释?空href值实际上是什么意思?它适用于所有框架,如 Angular 吗?

我听说<base>标签对于 Angular 应用程序初始化是强制性的,因此删除<base>标签可能不起作用。

注意:该网站可能已经包含一些<base>我总是想覆盖的标签。

我也尝试过<base href="/" />,但它会解析相对 URL

  • newfile.htmlhttp://proxyserver.com/newfile.html
  • #hashhttp://proxyserver.com/#hash 是错误的。

非常感谢任何帮助。

4

3 回答 3

0

<base href="" />定义所有相对路径的基础。它遵守汉兰达原则(“只能是一个”):-)

只是为了检查我是否理解你的目标。你写了:

  • newfile.html解决http://proxyserver.com/path/to/dir/newfile.html
  • /newfile.html解决http://proxyserver.com/newfile.html

因此,您不想拥有一个 Basepath,但如果有您需要的文档,您希望浏览器检查多个路径?

这不容易(从浏览器的角度来看)。原因是浏览器不知道这些路径的内容。他必须向这些服务器创建请求“嘿,不错的服务器,您的目录中有“newfile.html”吗?没有?好的,谢谢。”

就像@Attersson 所说,如果你想实现这一点,你必须在你的网络服务器中创建过滤器和路由。这对客户来说不是工作。

现在关于 Angular。在 Angular 6 中,您将<base href="/">在 index.html 中编写代码。Angular.json然后在您真正想要的基本路径中配置:

...
"architect": {
        "build": {
          "builder": "@angular-devkit/build-angular:browser",
          "options": {
             ...
            "baseHref": "/myLovedPath/",
...

结果,Angular 将构建应用程序并更改<base href="/"><base href="/myLovedPath/">

温暖的问候

于 2018-07-19T07:46:02.013 回答
0

该标记指定文档中所有相对 URL 的基本 URL/目标。文档中最多可以有一个元素,并且它必须在元素内部。

如果你喜欢http://proxyserver.com基本 url 将是 / ,但如果你喜欢这样的 dominehttp://proxyserver.com/appname/则基本 url 将类似于/appname/并且你通常会在部署期间使用这样的角度 cli 设置基本 url

ng build --prod --bh=/appname/

在这种情况下,您必须使用**HashLocationStrategy**路由

app.module.ts

@NgModule({
  imports: [
    RouterModule.forRoot(routes)
  ],
  exports: [
    RouterModule  
  ],
  providers: [
    { provide: LocationStrategy, useClass: HashLocationStrategy } 
  ]
})
export class AppRoutingModule { }

{ 提供:LocationStrategy,useClass:HashLocationStrategy }

于 2018-07-19T08:44:33.897 回答
0

基本 URL 或基本位置是唯一的根 URL,通过它可以将相对 URL 转换为网站的绝对 URL。多个基地是不可能的。

更复杂、不一致的策略可以通过重定向规则来实施。这个职责属于网络服务器。仅举几例,NginX、Apache 和 IIS 都具有设置重定向规则的能力。在那里你可以用正则表达式做任何你喜欢的事情。

由于这个问题被标记为 Angular,因此,由于仅在 Web 服务器解析 http 请求后才访问客户端页面,因此您必须为每个错误情况创建一个重定向到正确页面的空白页面。这当然比让 Web 服务器处理重定向更糟糕。

于 2018-07-19T07:43:15.247 回答