我有一个spring boot web应用程序,在我的本地运行良好,现在部署到服务器上时,我遇到了以下问题。
链接到其他页面。
在我的本地,下面的链接可以正常工作。
<a class="dropdown-item" href="/admin/manage-users">Users</a>
但在部署到服务器上时,工作的url应该是这样的:"链接到其他页面"。http://website.com/projectname/admin/manage-users
但它显示为: http://website.com/admin/manage-users
给我404 not found错误。为了解决这个问题,我不得不使用以下两种方法。
去掉前面的斜杠
<a class="dropdown-item" href="admin/manage-users">Users</a>
或者使用thymeleaf上下文相关的URLs。
<a class="dropdown-item" th:href="@{/admin/manage-users}">Users</a>
Ajax调用。
我尝试了同样的方法与ajax调用,但在这种情况下,它没有工作。我有一个datatable,如下所示,在我的本地工作正常。
var t_users = $("#tbl_users").DataTable({
"ajax": {
"url": "/admin/get-users",
"type": "GET",
"dataSrc": ""
}, ...
但在服务器上却给了我同样的404未找到的错误,因为: projectname
缺少了,所以我试着去掉前面的斜杠,现在我得到一个datatables的ajax错误,因为在url中的 admin
显示两次。.../admin/admin/manage-users
所以为了解决这个问题,我从这里找到了 联系 我需要删除 admin
的网址,如下图所示。
var t_users = $("#tbl_users").DataTable({
"ajax": {
"url": "get-users",
"type": "GET",
"dataSrc": ""
},
有没有其他方法让这个工作使用 admin/get-users
以避免混淆?
我建议在ajax调用中采用动态方法来避免这些问题。
var appHost = window.location.host;
var appProtocol = window.location.protocol
var pathArray = window.location.pathname.split('/');
var context = pathArray[1];
var contextUrl = appProtocol +"//"+ appHost +"/"+ context;
var url = contextUrl + "/admin/get-users" ;
var t_users = $("#tbl_users").DataTable({
"ajax": {
"url": url,
"type": "GET",
"dataSrc": ""
}, ...