2016-06-15 12 views
0

Ich habe ein Projekt mit Symfony 3.1 und ich habe eine ziemlich harte Zeit während der Bereitstellungsphase.Symfony3 Routing in Produktion

Mein Routing funktioniert perfekt in der Entwicklungsumgebung, mit dem eingebauten Server, aber in der Produktionsumgebung funktionieren einige Routen nicht. Sie feuern einen 405-Fehler, der besagt, dass die Methode nicht erlaubt ist.

Zum Beispiel eine der Routen, die nicht den Fall funktionieren (es feuert 405 wird POST nicht erlaubt, erlaubt: "GET, HEAD"):

http POST http://domain/api/benefits 

Andere arbeiten perfekt, wie

http GET http://domain/api/benefits 

ich habe versucht, den Cache über zurücksetzen:

./bin/console cache:clear -e=prod --no-debug 

Außerdem, wenn ich zu nennen:

./bin/console debug:router --env=prod 

Meine Routen sind da. Sie können die ouput hier sehen:

----------------------------- -------- -------- ------ ------------------------------- 
    Name       Method Scheme Host Path       
----------------------------- -------- -------- ------ ------------------------------- 
    api_read_benefit    GET  ANY  ANY /api/benefits/{id}    
    api_delete_benefit   DELETE ANY  ANY /api/benefits/{id}    
    api_edit_benefit    PUT  ANY  ANY /api/benefits/{id}    
    api_edit_benefit_picture  POST  ANY  ANY /api/benefits/picture/{id}  
    api_edit_benefit_attachment POST  ANY  ANY /api/benefits/attachment/{id} 
    api_list_benefits    GET  ANY  ANY /api/benefits/     
    api_new_benefits    POST  ANY  ANY /api/benefits/     
    api_read_entity    GET  ANY  ANY /api/entities/{id}    
    api_delete_entity    DELETE ANY  ANY /api/entities/{id}    
    api_list_entities    GET  ANY  ANY /api/entities/     
    api_new_entities    POST  ANY  ANY /api/entities/     
    logout      ANY  ANY  ANY /logout       
    lang       ANY  ANY  ANY /lang       
    app       ANY  ANY  ANY /{url} 

Mein routing.yml ist:

api: 
    resource: "@AppBundle/routing.yml" 
    prefix: /api 

logout: 
    path: /logout 

lang: 
    path: /lang 
    defaults: {_controller: AppBundle:Default:lang} 

app: 
    path:  /{url} 
    requirements: 
      url: ".*" 
    defaults: {_controller: AppBundle:Default:index} 

AppBundle/routing.yml:

api_benefits: 
    resource: "@AppBundle/Controller/benefits_routing.yml" 
    prefix: /benefits 

api_entities: 
    resource: "@AppBundle/Controller/entities_routing.yml" 
    prefix: /entities 

api_users: 
    resource: "@AppBundle/Controller/entities_routing.yml" 
    prefix: /entities 

AppBundle/Controller/benefits_routing.yml:

api_read_benefit: 
    path: /{id} 
    defaults: {_controller: "AppBundle:Benefits:read" } 
    methods: [GET] 
api_delete_benefit: 
    path: /{id} 
    defaults: {_controller: "AppBundle:Benefits:delete" } 
    methods: [DELETE] 
api_edit_benefit: 
    path: /{id} 
    defaults: {_controller: "AppBundle:Benefits:edit" } 
    methods: [PUT] 
api_edit_benefit_picture: 
    path: /picture/{id} 
    defaults: {_controller: "AppBundle:Benefits:pictureChange" } 
    methods: [POST] 
api_edit_benefit_attachment: 
    path: /attachment/{id} 
    defaults: {_controller: "AppBundle:Benefits:attachmentChange" } 
    methods: [POST] 
api_list_benefits: 
    path:/
    defaults: {_controller: "AppBundle:Benefits:list" } 
    methods: [GET] 
api_new_benefits: 
    path:/
    defaults: {_controller: "AppBundle:Benefits:new" } 
    methods: [POST] 

Jede Ausrichtung wäre hig Hly geschätzt, da ich das Problem nicht finden kann.

Vielen Dank.

EDIT:

Nur für den Fall, ich meine Apache Vhost Posting:

<VirtualHost 51.254.96.87:443> 
    ServerName domain 

    SSLEngine On 
    SSLProxyEngine On 
    SSLCertificateFile /etc/letsencrypt/live/domain/fullchain.pem 
    SSLCertificateKeyFile /etc/letsencrypt/live/domain/privkey.pem 

    DocumentRoot dir/web 
    <Directory dir/web> 
      AllowOverride All 
      Order allow,deny 
      Allow from all 
      <IfModule mod_rewrite.c> 
       Options -MultiViews 
       RewriteEngine On 
       RewriteCond %{REQUEST_FILENAME} !-f 
       RewriteRule ^(.*)$ app.php [QSA,L] 
      </IfModule> 
    </Directory> 
    <Directory dir/web/bundles> 
      <IfModule mod_rewrite.c> 
        RewriteEngine Off 
      </IfModule> 
    </Directory> 
    LogLevel warn 
    ErrorLog ${APACHE_LOG_DIR}/error.log 
    CustomLog ${APACHE_LOG_DIR}/access.log combined 
</VirtualHost> 

<VirtualHost 51.254.96.87:80> 
    ServerName domain 
    Redirect permanent/https://domain 
</VirtualHost> 
+0

Sieht aus wie die betreffende Strecke für PUT nicht definiert ist POST? – Cerad

+0

Es ist nicht, in der Fehlersuche heißt es: api_new_benefits POST ANY ANY/api/Vorteile/ Oder fehlt mir etwas? Es funktioniert sowieso perfekt im Entwickler. –

+0

Sie haben Recht. Wie genau generieren Sie die Anfrage? Ajax oder ein HTML-Formular. HTML-Formulare sind wirklich nur für den POST gedacht. http://symfony.com/doc/current/cookbook/routing/method_parameters.html – Cerad

Antwort