2010-01-19 5 views
0

Je configure donc SVN sur mon serveur domestique (Ubuntu 9.1), et je veux pouvoir voir immédiatement les modifications apportées à mon application CodeIgniter. Donc, ma copie de travail se trouve dans/home/mon_nom/environnements/developpement/nom_application.Boucle infinie sur la combinaison de RewriteRules

Mon Vhost est accessible à dev.appname.myname.ca, et la configuration ressemble à ceci:

DocumentRoot /home/myname/environments/development/ 
ServerName dev.myname.ca 
ServerAlias dev.*.myname.ca 

RewriteEngine On 
RewriteCond %{HTTP_HOST} !^www.* [NC] 
RewriteCond %{HTTP_HOST} ^dev.([^\.]+)\.myname\.ca 
RewriteCond /home/myname/environments/development/%1/trunk/ -d 
RewriteRule ^(.*) /%1/trunk/public/$1 

Alors, va dev.appname.myname.ca citerais/home/myname/environnements/développement/appname/trunk/public.

Maintenant, ce qui est une application CodeIgniter, je dois rediriger toutes les demandes du secteur public/à/index.php publique, de sorte que le fichier .htaccess en public/est comme suit:

RewriteEngine On 
RewriteCond $1 !^(index\.php) 
RewriteRule ^(.*)$ index.php/$1 [L] 

Je cette part dans un fichier .htaccess parce que sur un site de production en direct, je n'aurai pas accès à la configuration du serveur, donc je devrais le remplacer.

Le problème est maintenant que j'obtiens une boucle de redirections et finalement une erreur 500.

De /var/log/apache2/error.log:

redirected from r->uri = /appname/trunk/public/index.php/appname/trunk/public/index.php/appname/trunk/public/index.php/appname/trunk/public/index.php/appname/trunk/public/index.php/appname/trunk/public/index.php/appname/trunk/public/index.php/ 

Comment puis-je rediriger la requête vers le bon répertoire public/(dans ce cas,/home/myname/environnement/développement/appname/trunk/publc) et ALORS diriger toutes les demandes de public/vers public/index.php?

Je sais que c'est une question longue - merci pour votre aide. :)

Répondre

-1

Essayez d'utiliser quelque chose d'un peu moins fou, vous ne devriez pas avoir besoin de rediriger de public/à public/index.php car Apache le fera pour vous. Le Wiki CodeIgniter indique comment create the ultimate CodeIgniter .htaccess.

0

AS Phil dit que vous devez utiliser les règles de réécriture d'ici http://codeigniter.com/wiki/mod_rewrite/

Pour certains débogage, vous pouvez ajouter des lignes suivantes à votre hôte httpd.conf ou virtuel conf.

<IfModule mod_rewrite.c> 
RewriteLog "/var/log/apache2/rewrite.log" 
RewriteLogLevel 3 
</IfModule> 

Avec

tail -f /var/log/apache2/rewrite.log 

vous pouvez vérifier les règles de réécriture et quelques erreurs. Vous pouvez également changer le niveau à 9. Faites attention avec cette option. Cela produit beaucoup d'informations. C'est parfois utile.

1

Votre RewriteRule est en arrière de ce que vous voulez réellement.

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

Cela tournera "dirA/DGDIR/DIRC /" dans "index.php/dirA/DGDIR/DIRC". Sur la requête HTTP suivante, cela satisfera la condition et la règle sera à nouveau appliquée. Et encore, et encore ...

Essayez:

RewriteRule ^(.*)\/?$ $1/index.php [L] 
+0

Si vous le faites CodeIgniter ne marchera jamais.L'indicateur [L] signifie qu'il redirigera vers index.php, puis ne redirigera plus. –