Supprimer index.php de l’URL cause 404 dans yii

Le problème

Problème initial: Salut, j’ai un nouveau site Yii où je veux supprimer l’index.php de l’URL.
Exemple: “/index.php/site/index” doit être “/ site / index”

J’ai utilisé ce guide http://www.yiiframework.com/doc/guide/1.1/en/topics.url#hiding-x-23x mais je ne reçois que 404.

J’espère que vous pourrez signaler une erreur ou m’aider à déboguer ce problème!
S’il vous plaît laissez-moi savoir si j’ai laissé de côté toute information pertinente.

OBS: La page d’accueil fonctionne comme prévu, les autres pages sont brisées.

Statut du problème: Il semble que ce soit un problème Apache / Ubuntu avec mod_rewrite.so

Répondre

Après l’aide de différentes personnes, tout fonctionne maintenant: DI a dû installer “rewrit” pour le faire fonctionner, en écrivant Running a2enmod rewrit La configuration ci-dessous de mon système a résolu le problème pour moi, j’espère que ce thread aidera les autres problèmes similaires.

Mon système

Server version: Apache/2.2.22 (Ubuntu) Server built: Nov 8 2012 21:37:45 

Apache httpd.conf

  AllowOverride All #...  LoadModule rewrite_module modules/mod_rewrite.so 

C’est tout le contenu du fichier

Journal des erreurs Apache

 File does not exist: /.../htdocs/site, referer: http://.../htdocs/index.php/site/index 

J’ai ajouté les points

Redémarrer Apache

 kah@webaalborg:/etc/apache2/sites-available$ sudo service apache2 restart * Restarting web server apache2 [Mon Nov 26 20:16:35 2012] [warn] module rewrite_module is already loaded, skipping ... waiting [Mon Nov 26 20:16:36 2012] [warn] module rewrite_module is already loaded, skipping [ OK ] 

/ ect / apache2 / available-sites / default

 ... DocumentRoot /var/www  Options FollowSymLinks AllowOverride None   Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all   Options Indexes FollowSymLinks MultiViews AllowOverride all Order allow,deny allow from all  ... 

Structure de l’annuaire Yii:

  • cadre
  • htdocs
    • les atouts
    • css
    • .htaccess
    • index.php
    • index-test.php
    • thèmes
  • protégé

.htaccess

 RewriteEngine on # if a directory or a file exists, use it directly RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # otherwise forward it to index.php RewriteRule . index.php 

Fichier de configuration main.php

 'urlManager'=>array( 'urlFormat'=>'path', 'showScriptName'=>false, 'caseSensitive'=>false, 'rules'=>array( '/'=>'/view', '//'=>'/', '/'=>'/', ), ), 

Si vous travaillez sous Linux (disons ubuntu), allez dans le chemin /etc/apache2/sites-available/ vous trouverez un fichier nommé par default ,

   <--- ***root directory*** Options Indexes FollowSymLinks MultiViews AllowOverride all <---- ***change this line*** Order allow,deny allow from all  

et je pense que votre problème sera résolu.

Merci.

Avez-vous AllowOverride dans votre directive de répertoire?

  AllowOverride All #...  

Sinon, cela expliquerait pourquoi vos règles de réécriture ne fonctionnent pas.

Essayez de mettre cela dans .htaccess

 RewriteEngine On RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ index.php [NC,L] 

Supprimez également la ligne “LoadModule rewrite_module modules / mod_rewrite.so” de httpd.conf et activez le module de réécriture à partir de la ligne de commande, en exécutant la réécriture a2enmod.

  Options Indexes FollowSymLinks AllowOverride all <---- ***change this line*** Order allow,deny <---- ***change this line*** allow from all Require all granted