2010-10-27 7 views
0

J'ai un petit problème avec certaines règles de .htaccess sur notre site - http://www.presencemultimedia.co.ukproblème avec Réécriture .htaccess (suppression /index.php des URL CodeIgniter)

Nous avons récemment reconstruit le site Web en utilisant CodeIgniter. Pour utiliser de belles URL que j'ai ajouté quelques lignes à notre fichier .htaccess comme ci-dessous:

RewriteEngine on 

# CodeIgniter rules (forwards requests to index.php) 
RewriteCond $1 !^(index\.php|images|robots\.txt|public) 
RewriteRule ^(.*)$ /index.php/$1 [L] 

# rewrites path to our primary domain (www.presencemultimedia.co.uk) 
RewriteCond %{http_host} !www.presencemultimedia.co.uk$ 
RewriteRule ^(.*)$ http://www.presencemultimedia.co.uk/$1 [r=301,nc] 

La deuxième règle de réécriture est conçue pour assurer le domaine est toujours notre domaine principal (www.presencemultimedia.co.uk).

Le problème que j'ai, c'est que si le site Web est accessible par un domaine aliasé, par ex. http://www.prmulti.com, l'URL est réécrite dans le domaine principal mais ajoute /index.php/ au chemin.

Par exemple - http://www.prmulti.com/about/ devrait réécrire à http://www.presencemultimedia.co.uk/about/ au lieu de http://www.presencemultimedia.co.uk/index.php/about

Quelqu'un peut voir où je vais mal?

Cheers, Phil

+0

Avez-vous essayé d'éditer votre fichier config.php? Vous devriez supprimer index.php de $ config ['index_page'] – rabidmachine9

+0

Je l'ai fait - aucune différence malheureusement. – Phil

Répondre

3

J'ai eu la chance avec cette configuration:

RewriteEngine on 

# rewrites path to our primary domain (www.presencemultimedia.co.uk) 
RewriteCond %{http_host} !www.presencemultimedia.co.uk$ 
RewriteRule ^(.*)$ http://www.presencemultimedia.co.uk/$1 [r=301,nc,l] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php/$1 [L] 

Si la règle de domaine correspond, redirect (mais ce qui en fait la dernière règle). Ensuite, sur le domaine correct, si la requête n'est pas un fichier ou un répertoire existant, passez à Code Igniter.

+0

Je fonctionne en effet - acclamations :) J'ai dû remplacer les 2 dernières lignes RewriteCond avec la ligne CodeIgniter: RewriteCond $ 1!^(Index \ .php | images | robots \ .txt | public) (pour exclure certaines requêtes d'être routé vers index.php) À la votre! – Phil

+0

Cool. J'ai essayé les deux conditions! -f /! -d (comme je les ai déjà utilisées) après le single (images | public ...) l'entrée m'a donné un 500 ici - je ne sais pas pourquoi. –

2

j'aurais pensé que le 301 re directe devrait être au-dessus de vos règles de CodeIgniter, donnant:

RewriteEngine on 

# rewrites path to our primary domain (www.presencemultimedia.co.uk) 
RewriteCond %{http_host} !www.presencemultimedia.co.uk$ 
RewriteRule ^(.*)$ http://www.presencemultimedia.co.uk/$1 [r=301,nc] 

# CodeIgniter rules (forwards requests to index.php) 
RewriteCond $1 !^(index\.php|images|robots\.txt|public) 
RewriteRule ^(.*)$ /index.php/$1 [L] 

développé récemment un cadre multi-site pour un site Web, et c'est l'ordre de réécriture que j'utilise: domaine d'abord, puis diriger le résultat à travers mon index.php. La théorie devrait être la même pour un framework standard comme CodeIgniter.

+1

Cela semble correct. Le comportement observé correspond à cette explication. En ce que la demande vient dans le domaine alternatif, est 302'd à http://www.prmulti.com/index.php/ puis 301'd à http://www.presencemultimedia.co.uk/index.php //. Le [L] de votre première règle assurerait que c'est la dernière règle, de sorte qu'elle n'atteindra rien après. – Garethr

+0

Hmm ... cela renvoie un 301 pour www.prmulti.com maintenant (essentiellement tout domaine qui n'est pas www.presencemultimedia.co.uk) - http://cl.ly/307e – Phil

+0

Salut Martin - Le code de Craig a fait le emploi. Pour autant que je sache, la seule différence majeure avec la vôtre est l'indicateur L ajouté à la première règle de réécriture. Je ne sais pas pourquoi cela a fonctionné ... – Phil

Questions connexes