2016-05-03 5 views
1

Когда я прошу sitemap.xml, я получаю No route found for "GET /sitemap.xml". Мне нужно подать sitemap.xml из папки /web. Поэтому по какой-то причине Symfony начинает искать маршрут. Я думаю, config.yml испорчен. Я использую FOSRestBundle, который отлично работает, но может помешать работе маршрутизации.Symfony2: Поиск не найден для "GET /sitemap.xml"

Соответствующие части от config.yml:

framework: 
    translator: { fallback: en } 
    secret:   %secret% 
    router: 
     resource: "%kernel.root_dir%/config/routing.yml" 
     strict_requirements: ~ 
    form:   ~ 
    csrf_protection: 
     enabled:  false 
    validation:  { enable_annotations: true } 
    templating: 
     engines: ['twig'] 
     #assets_version: SomeVersionScheme 
    default_locale: "%locale%" 
    trusted_proxies: ~ 
    session: 
     save_path: %kernel.root_dir%/var/sessions 
    fragments:  ~ 
fos_rest: 
    cache_dir:  %kernel.cache_dir%/fos_rest 
    routing_loader: 
     default_format: json 
    service: 
     templating: templating 
     serializer: jms_serializer.serializer 
    serializer: 
     serialize_null: false 
    param_fetcher_listener: force 
    body_listener: true 
    body_converter: 
     enabled: true 
    format_listener: 
     rules: 
      - { path: '^/api', fallback_format: json } 
      - { path: '^/', priorities: [ 'html', '*/*'], fallback_format: html, prefer_extension: true } 
    view: 
     default_engine: twig 
     formats: 
      json: true 
     view_response_listener: forcebundle 
    unauthorized_challenge: "" 
    access_denied_listener: 
     json: true  
    exception: 
     codes: 
      'Symfony\Component\Routing\Exception\ResourceNotFoundException': 404 
     messages: 
      'Symfony\Component\Routing\Exception\ResourceNotFoundException': true 
      'Symfony\Component\HttpKernel\Exception\HttpException': true 

enter image description here

+1

Почему, по вашему мнению, проблема FOSRestBundle? Разве это не нормально, что каждый вызов URL-адреса проходит через маршрутизатор? Или вы обрабатываете свою карту сайта, создавая маршрут [link] (http://symfony.com/doc/current/cmf/bundles/seo/sitemap.html), или вы сделали особый доступ в своей конфигурации nginx/apache, чтобы служить этому URL-адрес. – olibiaz

+1

Как уже упоминалось, нет ничего, связанного с Symfony, ваш конфигуратор веб-сервера должен содержать правило вроде: if file exist> return file. – malcolm

ответ

3

Неа. Проблема здесь в вашем .htaccess или аналогичном механизме перезаписи.

По умолчанию .htaccess, который поставляется с Symfony inncludes этих правил:

RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule .? - [L] 

, что означает, «если существует фактический файл, просто служить ей». В вашем случае это правило не применяется по некоторым причинам, поэтому все передается по app.php и Symfony маршрутизации, но Symfony не имеет маршрута /sitemap.xml, поэтому ошибка 404.

+0

Действительно, это была проблема с '.htaccess'. В моем случае приложение Symfony было отправлено из подпапки '/ api', а RewriteRule для файлов Sitemap в корневом' .htaccess' было неправильным. Правильный вариант: «RewriteRule^sitemap (. *). Xml $ api/web/sitemap $ 1.xml [L]' – Websirnik