Что означает пустой тег href для тега html <base>?
Предположим, что 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
значение на самом деле значит? Это будет работать для всех структур как угловой?
Я слышал что <base>
тег обязателен для угловых приложений для инициализации и, следовательно, удаления <base>
тег может не работать.
ПРИМЕЧАНИЕ. Веб-сайт может уже содержать некоторые <base>
тег, который я всегда хотел бы переопределить.
Я тоже пробовал <base href="/" />
но это разрешит относительные URL
newfile.html
вhttp://proxyserver.com/newfile.html
а также#hash
вhttp://proxyserver.com/#hash
что неправильно.
Любая помощь высоко ценится.
3 ответа
Базовый URL или базовое местоположение - это уникальный корневой URL, с помощью которого относительные URL могут быть преобразованы в абсолютные URL для веб-сайта. Многократные основания невозможны.
Более сложные, противоречивые политики могут быть применены с помощью правил перенаправления. Эта обязанность принадлежит веб-серверу. Чтобы перечислить несколько, NginX, Apache и IIS все имеют возможность устанавливать правила перенаправления. Там вы можете делать все что угодно с регулярными выражениями.
Так как этот вопрос помечен как Angular, то, поскольку клиентская страница доступна только после того, как веб-сервер разрешит запрос http, вам придется создавать пустую страницу, перенаправляющую на правильную страницу для каждого неправильного случая. Что, конечно, хуже, чем позволить веб-серверу обрабатывать перенаправления.
Тег определяет базовый URL/ цель для всех относительных URL в документе. В документе может быть не более одного элемента, и он должен быть внутри элемента.
если тебе нравится http://proxyserver.com
базовый URL будет /, но если домин, как это http://proxyserver.com/appname/
поэтому базовый URL-адрес будет выглядеть как /appname/, и вы обычно будете устанавливать базовый 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 }
<base href="" />
определяет базу для всех относительных путей. И он подчиняется принципу Горца ("ТАМ МОЖЕТ БЫТЬ ТОЛЬКО ОДИН"):-)
Просто чтобы проверить, правильно ли я понимаю вашу цель. Вы написали:
newfile.html
разрешитьhttp://proxyserver.com/path/to/dir/newfile.html
/newfile.html
разрешитьhttp://proxyserver.com/newfile.html
Таким образом, вы НЕ хотите иметь ОДИН базовый путь, но хотите, чтобы браузер проверял несколько путей, если есть документ, который вам нужен?
Это не легко возможно (с точки зрения браузера). Причина в том, что браузер не знает содержание этих путей. Он должен создать запросы к этим серверам: "Эй, хороший сервер, у тебя есть" 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/">
теплые пожелания