ASP.NET Core 2.0 - Обслуживание файлов без расширения - PullRequest
0 голосов
/ 18 мая 2018

Я тоже пытаюсь настроить Let's Encrypt на моем сайте.В сети я нашел несколько решений, к сожалению, ни одно из них не сработало.

Я нахожусь на Debian 8.7 с Apache 2 и .NET Core 2.0.

Я пытался разместить веб.config (и несколько его вариантов) в папке .well-known / acme-challenge - не повезло.Я попробовал решения по этим ссылкам (в основном добавив web.config и добавив некоторый код):

https://github.com/ebekker/ACMESharp/issues/15
Установить web.config для letsencrypt - сертифицируйте с помощью Asp.NET Core иAngular 2 (Javascript-сервисы)

Я видел это, но это для известного имени файла, LE дает случайные имена файлов, поэтому я не знаю, как это реализовать: asp.netcore - Как обслуживать статический файл без расширения

Я знаю, что не проблема, если я неправильно укажу URL, как будто я добавляю расширение (например, .t) к файлу, а затем добавляюна URL-адрес сайт правильно возвращает файл.

Вот файл web.config в acme-challenge:

<?xml version = "1.0" encoding="UTF-8"?>
 <configuration>
    <system.webServer>
        <staticContent>
            <mimeMap fileExtension=".*" mimeType="text/plain" />
        </staticContent>
        <handlers>
            <clear />
            <add name="StaticFile" path="*" verb="*" type="" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" scriptProcessor="" resourceType="Either" requireAccess="Read" allowPathInfo="false" preCondition="" responseBufferLimit="4194304" />
        </handlers>
     </system.webServer>
 </configuration>

Вот общий файл web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="dotnet" arguments=".\my.site.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
  </system.webServer>
</configuration>

Вот код, добавленный в Configure ():

app.UseStaticFiles(new StaticFileOptions
{
    FileProvider = new PhysicalFileProvider("/var/aspnet/miadola/wwwroot/.well-known"),
    RequestPath = new PathString("/var/aspnet/miadola/wwwroot/.well-known"),
    ServeUnknownFileTypes = true // serve extensionless files
});

Ответы [ 2 ]

0 голосов
/ 10 июня 2019

Для меня это сработало примерно так:

app.UseStaticFiles(); // For the wwwroot folder
app.UseStaticFiles(new StaticFileOptions    //For the '.well-known' folder
     {
          FileProvider = new PhysicalFileProvider(System.IO.Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/.well-known")),
          RequestPath = "/.well-known",
          ServeUnknownFileTypes = true,
     });

, а также поместив следующие строки внутри <system.webServer>

 <staticContent>
      <mimeMap fileExtension=".*" mimeType="text/plain" />
 </staticContent>
0 голосов
/ 18 мая 2018

Ваш код выглядит хорошо, за исключением 1 строки.

app.UseStaticFiles(new StaticFileOptions {
    FileProvider = new PhysicalFileProvider("/var/aspnet/miadola/wwwroot/.well-known"),
    RequestPath = new PathString("/.well-known"),
    ServeUnknownFileTypes = true // serve extensionless files
});

Заметили разницу?Строка - это RequestPath.Эта строка - то, что вы вводите в браузере после домена.

Так что в настоящее время ваши точки решения работают, когда вы переходите по адресу:

www.example.com / var / aspnet / miadola/wwwroot/.well-known


Также нет необходимости в файлах web.config, предназначенных для работы под IIS (windows).

...