открытые файлы Symfony 4 недоступны - PullRequest
0 голосов
/ 16 января 2019

При развертывании на тестовом сервере я не могу получить доступ к чему-либо в общей папке. Я получаю ошибку Symfony Route. Как будто он не распознает общую папку. Все страницы проходят правильно. Моя среда разработки выглядит следующим образом: c: \ inetpub \ wwroot \ userdir \ symfony-test Что переводится как этот URL. https://servername/userdir/symfony-test/test

Попытка вытащить тестовое изображение ниже или файлы css или js в ветке, я получаю ошибку 404

 <img src="{{  asset('build/images/test.jpg')   }}"  alt="test">

Видя, что он не получает полный путь, я изменил framwork.yaml, чтобы установить base_urls, который дает полный путь, и установил json manifest_path. Хотя путь манифеста правильный, и я вижу, что он дает полный путь при использовании base_urls, я все равно получаю 404 за все, что находится в общей папке.

assets:
    json_manifest_path: '%kernel.project_dir%/public/build/manifest.json'
    base_urls:
      - 'https://servername/userdir/symfony-test/public/'

Выполнение вышеизложенного привело к

GET https://servername/userdir/symfony-test/build/images/test.93d146a7.jpg 404 (Not Found)

Я также обновил файл composer.json, как показано ниже, чтобы добавить public-dir в раздел «extra», следуя инструкциям по ссылке здесь. https://symfony.com/doc/current/configuration/override_dir_structure.html

 "extra": {
    "symfony": {
        "allow-contrib": false,
        "require": "4.2.*",
        "public-dir": "userdir/symfony-test/public/"
    }

Файлы скомпилированы с использованием Encore Webpack и работают как положено.

Encore // directory where compiled assets will be stored .setOutputPath('public/build/') .enableVersioning() // public path used by the web server to access the output path .setPublicPath('/build') .addEntry('app', './assets/js/app.js') .addEntry('test','./assets/images/test.jpg') Это тоже может быть полезной информацией. Вот правило в файле /public/web.config.

<rule name="Imported Rule 1" stopProcessing="true">
          <match url="^(.*)$" ignoreCase="false" />
          <conditions logicalGrouping="MatchAll">
            <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
          </conditions>
          <action type="Rewrite" url="index.php" appendQueryString="true" />
        </rule>

Правило в symfony-test / web.config

<rewrite>
      <rules>
         <rule name="Symfony4" stopProcessing="true">
           <match url="(.*)" ignoreCase="false" />
           <action type="Rewrite" url="public/" appendQueryString="true" />
         </rule>
      </rules>
</rewrite>

Запуск Symfony 4 в IIS Windows Server 2012 R2. Php 7.2.13,
Композитор версия 1.6.5, версия узла 8.11.4, пряжа 1.9.4

Как получить общедоступную папку для распознавания и не считать маршрут или получить 404.

1 Ответ

0 голосов
/ 17 января 2019

Я нашел кого-то, кто настраивал среду iis для Symfony 2 на github. После учета структуры каталогов я добавил эти правила в свой файл web.config, и теперь он работает как положено. Надеюсь, это поможет кому-то еще по тем или иным причинам использовать Symfony на iis :).

<rules>
                <rule name="TempRewriteToWeb" stopProcessing="false">                                  
                    <match url="^(public/)?(.*)$" />
                    <action type="Rewrite" url="public/{R:2}" logRewrittenUrl="true" />
                </rule>      
                <rule name="StaticFiles" stopProcessing="true">                                  
                    <match url="^(.*)$" />
                     <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile"/>                        
                    </conditions>
                    <action type="Rewrite" url="{R:0}" logRewrittenUrl="true" />
                </rule>                         
               <rule name="RewriteRequestsToPublic" stopProcessing="true">
                    <match url="^(public/)(.*)$" />
                    <action type="Rewrite" url="public/index.php?{R:2}" logRewrittenUrl="true"/>
                </rule>           
            </rules>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...