Nie można tego zrobić bez polegania na JavaScript, aby dynamicznie zmieniać href. Sposób względne URI są przekształcane w absolutnym URI opisano w RFC 3986 Section 5.2.2:
if defined(R.scheme) then
T.scheme = R.scheme;
T.authority = R.authority;
T.path = remove_dot_segments(R.path);
T.query = R.query;
else
if defined(R.authority) then
T.authority = R.authority;
T.path = remove_dot_segments(R.path);
T.query = R.query;
else
if (R.path == "") then
T.path = Base.path;
if defined(R.query) then
T.query = R.query;
else
T.query = Base.query;
endif;
else
if (R.path starts-with "/") then
T.path = remove_dot_segments(R.path);
else
T.path = merge(Base.path, R.path);
T.path = remove_dot_segments(T.path);
endif;
T.query = R.query;
endif;
T.authority = Base.authority;
endif;
T.scheme = Base.scheme;
endif;
T.fragment = R.fragment;
przypadku R
jest względem adresu URL i T
jest docelowego.
Powyższe w zasadzie mówi, że jeśli schemat jest określony we względnym URI, to uri docelowy będzie całkowitą wartością URI, więc jedynym sposobem na określenie schematu jest określenie całego adresu URL.
Jeśli chcesz korzystać z podejścia opartego na JavaScript, możesz dynamicznie ustawić href, używając np.: a.href = 'https://' + window.location.host + a.getAttribute('href')
. Gdzie a
jest twoim AnchorElement.
Oto demo wersji javascript: http://jsfiddle.net/7DWV5/
jednak w dużej mierze z tego powodu już napotkanego, że jest to dobry pomysł, aby albo zapisać nazwę hosta w pliku konfiguracyjnym, lub wykrycia go z nagłówek HTTP Request Host
w kontrolerze frontowym. W ten sposób możesz po prostu złożyć go w HTML podczas generowania strony. Dzięki temu nie trzeba używać skryptów po stronie klienta, aby naprawić adresy URL po ich wygenerowaniu, co może być pożądane, ponieważ nie każdy ma włączoną obsługę JavaScript.
Witamy w StackOverflow. To dobre pytanie. – Paulpro