Я работаю над решением, в котором два приложения размещены в IIS
- Приложение 1: размещено в порту 80/443 и доступно для внешней сети. Это обрабатывает все входящие запросы API.
- Приложение 2. Размещено в порту 33957 и за брандмауэром (не подвержено воздействию внешней сети).
Оба приложения работают нормально при просмотре.
Поскольку приложение 1 открыто для внешней сети, я написал URL для перезаписи. Когда это приложение получает какой-либо запрос, оно должно переписать его и отправить в приложение 2. Похоже, что это происходит. Однако файлы stati c, такие как css, js, не отображаются в браузере. Как мне разобраться?
Приложение 1: Конфигурация запуска.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
//Other parts of the code removed for clarity//
//CORS POLICY
app.UseCors(p => p
.AllowAnyHeader()
.AllowAnyMethod()
.AllowAnyOrigin()
);
//REWRITE METHODS
var rewrite = new RewriteOptions()
.Add(new PotreeRewriter());
app.UseRewriter(rewrite);
//Other parts of the code removed for clarity//
}
Перезапись:
Концепция просто. Всякий раз, когда запрашивается URL-адрес с включенной определенной строкой (/ 895da1e9-a065-40df /), я переписываю его на другой URL-адрес, работающий на локальном хосте. Поскольку это перезапись, это происходит на стороне сервера.
public class PotreeRewriter : IRule
{
public void ApplyRule(RewriteContext context)
{
var request = context.HttpContext.Request;
var full_url = $@"{request.Scheme}://{request.Host}{request.PathBase}{request.Path}{request.QueryString}";
var url = request.Path.ToString();
string potreeviewer = @"/895da1e9-a065-40df/";
// Rewrite to index
if (url.Contains(potreeviewer) && request.Method == "GET")
{
request.Host = new Microsoft.AspNetCore.Http.HostString("localhost", 39987); //Change host value
request.PathBase = ""; //Remove base, if any
// rewrite and continue processing
int end_index = url.IndexOf(potreeviewer);
string to_replace = url.Substring(0, end_index + potreeviewer.Length);
string new_url = url.Replace(to_replace, "/acl-i/");
request.Path = new_url;
full_url = $@"{request.Scheme}://{request.Host}{request.PathBase}{request.Path}{request.QueryString}";
var response = context.HttpContext.Response;
response.StatusCode = StatusCodes.Status200OK;
response.Headers[HeaderNames.Location] = full_url; //Just to see if it is reaching correct location. Will remove later.
context.Result = RuleResult.EndResponse;
}
}
}
Результаты из браузера
Я попытался найти определенный файл css, используя прямой URL, а также используя метод перезаписи. Ниже приведены мои результаты.
Прямой URL
Переписать URL
Видно, что при перезаписи URL контент не получен. Как мне это отсортировать? Где я ошибся?