2010-12-15 67 views
2

Je suis un gars asp.net et c'est la première fois que j'ai traité avec PHP.Codeigniter -> Erreur 404. Les routes simples ne fonctionnent pas

De toute façon, j'ai eu du mal à migrer un site existant vers un nouveau serveur.

Ce site utilise le codeigniter. Quand j'appelle http://mydomain/admin Je reçois une erreur 404!

Mais si je l'appelle:

http://mydomain/index.php/admin

ça marche!

J'ai placé un fichier .htaccess à la racine:

RewriteEngine on 
RewriteCond $1 !^(index\.php|images|stylesheets|scripts|robots\.txt) 
RewriteRule ^(.*)$ /index.php/$1 [L] 

J'ai mis dans le config.php:

$config['index_page'] = ''; 

Mon routes.php:

$route['default_controller'] = 'welcome'; 
$route['scaffolding_trigger'] = ''; 

Je n'ai aucune idée de pourquoi ça ne marche pas. Ça doit être quelque chose de très simple je suppose ...

Merci!

+1

Êtes-vous obtenir les CI 404 ou 404 du serveur? – DampeS8N

+0

Comment saurais-je si c'est l'erreur de CI ou le serveur? Il semble que ce soit Apache, puisque je ne vois rien de spécial à ce sujet. Voici le lien: http://72.9.251.2/~stnoa/admin peut-être que vous pouvez dire ce qui ne va pas. Celui-ci fonctionne: http://72.9.251.2/~stnoa/index.php/admin Merci !!!! – santiagoIT

+0

Attendez. Le lien fonctionne maintenant. Cela signifie-t-il que vous l'avez réparé? .... et sans rapport? Pour la honte! ;-) –

Répondre

6

Avez-vous regardé à travers cette ?: http://codeigniter.com/wiki/mod_rewrite/

Sinon, essayez celui-ci:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/

    #Removes access to the system folder by users. 
    #Additionally this will allow you to create a System.php controller, 
    #previously this would not have been possible. 
    #'system' can be replaced if you have renamed your system folder. 
    RewriteCond %{REQUEST_URI} ^system.* 
    RewriteRule ^(.*)$ /index.php?/$1 [L] 

    #When your application folder isn't in the system folder 
    #This snippet prevents user access to the application folder 
    #Submitted by: Fabdrol 
    #Rename 'application' to your applications folder name. 
    RewriteCond %{REQUEST_URI} ^application.* 
    RewriteRule ^(.*)$ /index.php?/$1 [L] 

    #Checks to see if the user is attempting to access a valid file, 
    #such as an image or css document, if this isn't true it sends the 
    #request to index.php 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ index.php?/$1 [L] 
</IfModule> 

<IfModule !mod_rewrite.c> 
    # If we don't have mod_rewrite installed, all 404's 
    # can be sent to index.php, and everything works as normal. 
    # Submitted by: ElliotHaughin 

    ErrorDocument 404 /index.php 
</IfModule> 

Il y avait un de Jamie Rumbelow je l'habitude d'utiliser un peu, mais pas sur son blog plus ... Je suis habitué à nginx maintenant, donc ma configuration préférée ne fonctionnera pas pour vous.

+0

Matthew, Je viens de remplacer le contenu de .htaccess avec ce que vous avez collé et je reçois maintenant: 500 Erreur interne du serveur La requête n'a pas été complétée. Le serveur a rencontré une condition inattendue. lors de l'appel de la page. – santiagoIT

+0

Y at-il un moyen de savoir si mod_rewrite est activé? – santiagoIT

+0

Je suppose que la dernière partie de cet htaccess dire si le module n'existe pas, puis faire un 404 - pas sûr cependant. Il semble que la plupart du temps (dans mon expérience), il n'est pas activé par défaut, mais il est installé. – Matthew

0

essayer d'ajouter RewriteBase / dans .htaccess

+0

Bogdan, il n'a pas aidé – santiagoIT

+0

vous devriez vraiment consulter les journaux apache pour des conseils sur ce qui se passe. Tout semble bien dans .htaccess – Bogdan

1

Essayez ceci:

RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule .* index.php/$0 [PT,L] 
2

Votre fichier .htaccess ne fonctionne pas pour moi non plus. Mais cela a fonctionné une fois je l'ai changé la règle de réécriture à ceci:

RewriteRule ^(.*)$ index.php/$1 [L] 

Je viens enlevé la barre oblique au début.

+0

Merci qui l'a fait! – santiagoIT

1

- Créez un fichier .htaccess dans la racine que vous êtes projet CodeIgniter.

- Dans le fichier .htaccess créé mettre le code:

RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule .* index.php/$0 [PT,L] 
0
  $default_controller = "home"; 
      $language_alias = array('gr','fr'); 
      $controller_exceptions = array('signup'); 
      $route['default_controller'] = $default_controller; 
      $route["^(".implode('|', $language_alias).")/(".implode('|', $controller_exceptions).")(.*)"] = '$2'; 
      $route["^(".implode('|', $language_alias).")?/(.*)"] = $default_controller.'/$2'; 
      $route["^((?!\b".implode('\b|\b', $controller_exceptions)."\b).*)$"] = $default_controller.'/$1'; 
      foreach($language_alias as $language) 
      $route[$language] = $default_controller.'/index'; 
      $route['404_override'] = '';