Laravel 5 Apache mod_rewrite ne fonctionne pas

Oui, il y a eu des questions similaires, mais les solutions proposées ne fonctionnent pas pour moi. J’ai donc mis en place Laravel, et l’installation fonctionne bien. Eh bien, tant que je rest sur la route de base

localhost/page/ 

dès que j’essaie de bash un de mes itinéraires, disons

 localhost/page/subpage 

et l’itinéraire est configuré pour renvoyer une vue

 Route::get('subpage', ['as' => 'subpage', 'uses' => 'GenericPageController@subpage']); 

La subpage méthode dans le contrôleur:

 public function subpage() { return view('base.subpage'); } 

Je reçois simplement une réponse 404 du serveur chaque fois que j’essaie d’atteindre l’un des itinéraires. Peu importe quel contrôleur j’utilise, ou s’il renvoie une vue ou une fermeture.

  • mod_rewrite est activé
  • Dans le répertoire principal, AllowOverride est défini sur All

mon .htaccess dans le dossier page/public ressemble à ceci:

   Options -MultiViews  RewriteEngine On RewriteBase / # Redirect Trailing Slashes... RewriteRule ^(.*)/$ /$1 [L,R=301] # Handle Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] 

Quelqu’un a une idée de ce que le problème pourrait être?

Le fichier .htaccess ne sera pas chargé car il se trouve dans le répertoire public , qui est vraiment destiné à être la racine de votre document. En tant que tel, vous devriez accéder à l’application en vous rendant sur localhost/page/public/subpage .

Si vous souhaitez utiliser localhost/page/subpage tout en conservant la structure de votre répertoire, vous devez append un nouveau fichier .htaccess répertoire de la page et supprimer le fichier .htaccess du répertoire public .

/page/.htaccess :

   Options -MultiViews  RewriteEngine On RewriteBase /page/ # Redirect Trailing Slashes... RewriteRule ^(.*)/$ /$1 [L,R=301] # Send requests to public directory... RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^ public/index.php [L]  

Malheureusement, en raison de la manière dont Laravel obtient les informations de demande, vous devrez regrouper vos itinéraires vers le répertoire de page de votre configuration d’itinéraire:

 Route::group(['prefix' => 'page'], function() { Route::get('subpage', ['as' => 'subpage', 'uses' => 'GenericPageController@subpage']); // Your other routes ... }); 

Essentiellement, et à mon avis, c’est la façon la plus simple de contourner ce problème. Vous pouvez également déplacer le contenu de votre répertoire public d’un niveau et modifier les chemins en conséquence dans le fichier d’amorçage.