2014-07-26 3 views
4

J'ai essayé de comprendre pourquoi cela se passe ces deux derniers jours sans succès. J'ai trouvé quelques autres questions traitant des erreurs 403 lors du routage dans Laravel mais aucune concernant un problème avec une seule route. Donc, quelque chose de nouveau à Laravel et le développement web, donc peut-être manquer quelque chose d'évident, mais voici:Route unique donnant une erreur 403 Forbidden in Laravel 4

Donc les routes dans mon projet fonctionnent toutes sauf une, cette route étant {mywebsite}/admin, ce qui me donne une erreur 403 . Il fonctionne lorsque je vais sur {mywebsite} /index.php/admin. Ce que je ne comprends pas, c'est pourquoi aucune de mes autres routes n'a le même problème. Par exemple, {mywebsite}/test works et {mywebsite}/admin/categories fonctionnent. C'est littéralement la seule route qui ne fonctionne pas. A noter également que le même problème se pose lorsque j'essaie d'y accéder à la fois sur mon serveur local et sur mon serveur de production (Digital Ocean avec Laravel Forge).

Voici mon fichier routes.php:

Route::get('/', function() 
{ 
    return View::make('hello'); //works 
}); 

Route::get('/admin', function() 
{ 
    return "admin"; //403 error 
}); 

Route::get('/test', function() 
{ 
    return "test"; //works 
}); 


//these all work 
Route::get('/admin/dashboard', '[email protected]'); 

// all category routes 
Route::get('/admin/categories/', '[email protected]'); 
Route::get('/admin/categories/{id}/edit', '[email protected]'); 
Route::post('/admin/categories/{id}/edit/', array('uses' => '[email protected]')); 
Route::post('/admin/categories/create/{id}', array('uses' => '[email protected]')); 
Route::get('/admin/categories/delete/{id}', array('uses' => '[email protected]')); 

Route::get('/admin/categories/create', function() 
{ 
    return View::make('CreateCategory'); 
}); 

// all form routes 
Route::get('/admin/forms/{id}/edit', '[email protected]'); 
Route::post('/admin/forms/{id}', '[email protected]'); 
Route::post('/admin/forms/{id}/submit', '[email protected]'); 
Route::get('/admin/forms/{id}/add', '[email protected]'); 
Route::get('/admin/forms/{id}/edit/{elementId}', '[email protected]'); 
Route::get('/admin/forms/{id}/delete/{elementId}', '[email protected]'); 
Route::post('/admin/forms/{id}/saveUpdates/{tid}', '[email protected]'); 


//time table routes 
Route::post('/admin/categories/{id}/timetable/{date}', array('uses' => '[email protected]')); 
Route::get('/admin/categories/{id}/timetable', array('uses' => '[email protected]')); 
Route::get('/admin/categories/{id}/timetable/{date}', array('uses' => '[email protected]')); 

Et voici mon fichier .htaccess:

<IfModule mod_rewrite.c> 
    <IfModule mod_negotiation.c> 
     Options -MultiViews 
    </IfModule> 

    RewriteEngine On 

    # Redirect Trailing Slashes... 
    RewriteRule ^(.*)/$ /$1 [L,R=301] 

    # Handle Front Controller... 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule^index.php [L] 
</IfModule> 

Quelqu'un at-il la moindre idée pourquoi cela pourrait se produire?

+3

Avez-vous un dossier appelé 'admin' dans votre dossier' app/public'? Si c'est le cas, vous voudrez supprimer ce dossier. La réécriture de l'url est probablement ignorée car le répertoire existe, et il tente d'afficher le répertoire 'app/public/admin' de la liste des répertoires, mais interdit de le faire. – Unnawut

+0

@Unnawut Wow, oui. C'était le problème. Merci beaucoup! – Brian

+0

Content de pouvoir aider. ;) Votre question me semble légitime. Je ne sais pas pourquoi il y a un downvote ici. Upvoted pour le neutraliser. – Unnawut

Répondre

11

Avec l'indice que vous pouvez accéder {mywebsite}/index.php/admin alors que d'autres itinéraires fonctionnent très bien signifie que votre route Laravel et le fichier .htaccess fonctionnent.

Le problème est probablement de sauter .htaccess url réécrire seulement pour url {mywebsite}/admin, liée à ces trois lignes:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule^index.php [L] 

Les deux premières lignes ci-dessus indique APACHE pas la réécriture d'URL à la index.php de Laravel si l'URL demandée pointe vers un fichier ou un dossier existant. Le fait qu'il montre 403 Interdit est très probablement parce que Apache essaie de répertoire répertoire /admin mais il est interdit de le faire. La solution consiste donc à s'assurer que vous n'avez pas de dossier app/public/admin. Si c'est le cas, supprimez-le et réessayez.

+3

J'avais un dossier nommé 'admin', j'ai ri. Merci! – Stichoza

+0

Cela m'est également arrivé, merci de poster votre réponse et vos solutions! – WDMTech

Questions connexes