2010-12-14 72 views
0

La manière la plus succincte de résumer le problème à la main:Symfony 1.4 problèmes de routage que lorsque vous utilisez index.php et mod_rewrite

  • développement est terminé, et tout a été exécuté sur frontend_dev.php au cours du développement et de test

    Cela signifie que toutes les URL sont les suivants: server.com/frontend_dev.php/module/action/parm

  • Le passage à la production des moyens de commutation environnements, et thusly utilisant inde x.php à la place
    server.com/index.php/module/action/parm

  • Une partie de mise en production utilise mod_rewrite sous Apache2 pour faire la partie de l'URL « index.php » Vanish, mais toujours fonctionner
    server.com/module/action/parm est toujours dirigé contre index.php

  • les URL apparaissent en effet w/o la partie index.php, mais le routage symfony est maintenant se plaindre:
    c.-à-d. Server.com/goals qui route vers les objectifs/index
    - parfaitement bien à l'aide frontend_dev.php ou index.php comme contrôleur explicite
    server.com/index.php/goals
    - en utilisant aucun contrôleur explicite (via rewrite):
    [Mar Déc 14 12:59:51 2010] [error] [client 75.16.181.113] module vide et/ou action après l'analyse de l'URL "/ objectifs /" (/)

J'ai vérifié la réécriture est en effet routage à index.php en changeant la réécriture à quelque chose qui n'existe pas:
[Mar 14 décembre 2010 13:05:43] [error] [client 75.16.181.113] script '/opt/www/projects/adam/web/index2.php' introuvable ou incapable de stat

J'ai essayé de rediriger à frontend_dev.php, mais seulement suis fourni avec plus d'informations de débogage de symfony, dont aucune n'est utile:

404 | Introuvable sfError404Exception Module vide et/ou action après l'analyse de l'URL "/ goals /" (/).

pile trace 1. à() en ligne SF_SYMFONY_LIB_DIR/contrôleur/sfFrontWebController.class.php 44 ...
2. à sfFrontWebController-> dispatch() dans la ligne SF_SYMFONY_LIB_DIR/util/sfContext.class.php 170. ..
3. à sfContext-> dispatch() dans SF_ROOT_DIR/web/ligne frontend_dev.php 13 ...

J'ai essayé l'aide de l'option RewriteBase dans .htaccess, mais cela ne suffit pas , ni changer le vrai/faux dans la ligne de configuration des contrôleurs

J'espère que cela fournira s assez pour comprendre pourquoi nous sommes confus, et capable de nous diriger vers une résolution.

Voici le courant.htaccess et index/lignes de configuration frontend

index.php:

configuration $ = ProjectConfiguration :: getApplicationConfiguration ('frontend', 'prod', false);

frontend_dev.php:

configuration $ = ProjectConfiguration :: getApplicationConfiguration ('frontend', 'dev', true);

.htaccess:

RewriteEngine On

# Décommentez la ligne suivante, si vous rencontrez des problèmes # obtenir no_script_name travailler #RewriteBase/

# nous sautons tous fichiers avec .quelquechose #RewriteCond% {REQUEST_URI} .. + $ #RewriteCond% {REQUEST_URI}! .html $ #RewriteRule * -. ([. ^] +) [L]

de # on vérifie si la version .html est ici (mise en cache) RewriteRule^$ index.html [QSA] RewriteRule^$ $ 1.html [QSA] RewriteCond% {REQUEST_FILENAME}! -f

# pas, donc nous rediriger vers notre contrôleur de front RewriteRule^(. *) index.php $ [QSA, L]

+0

Il semble étrange que symfony se plaint d'une route introuvable lors de la réécriture correcte de la requête - Avez-vous essayé de vider la configuration de l'itinéraire directement dans votre navigateur via index.php? Et effacer le cache manuellement, peut-être? Aussi, essayez de réécrire votre index2.php et faites-le imprimer la requête. – cvaldemar

+1

Pourriez-vous poster votre routing.yml? – Vojta

Répondre

0

Bienvenue empiler le débordement.

Peut-être que vous confondez l'itinéraire "index" avec "index.php"?

Ces URL devraient théoriquement tous fonctionner.

server.com/frontend_dev.php/goals/index 
server.com/index.php/goals/index 
server.com/goals/index 
server.com/goals 

Je ne sais plus si le slash, comme server.com/goals/, fonctionne ou non. Il y a un gotcha là-bas.

+0

La barre oblique ne devrait pas être là ... – Vojta

1

J'ai eu un problème similaire et la définition de 'AllowOverride' à ALL pour le dossier WEB de Symfony dans la configuration de Virtual Host a résolu ce problème.