2012-09-05 2 views
1

Je viens de mettre à jour un de mes sites Web statiques vers un site web activé par codeIgniter. J'ai besoin de rediriger les noms de domaine exacts de l'ancien site vers les nouveaux pour éviter l'erreur 404.301 rediriger vers d'anciennes pages du site avec codeIgniter

  • pages Vieux>http://example.com/pagename.php
  • nouvelles pages>http://example.com/index.php/home/category_images/9(cat_id)

Je ne très haut pas. de pages si difficile à coder toutes les pages directement ne sera pas un problème. J'ai essayé:

Ne fonctionne pas, je ne sais pas pourquoi. mod_rewrite est activé sur mon serveur apache.

Aussi, juste pour la confirmation s'il vous plaît dites-moi aussi dans quel dossier je devrais mettre ce fichier, je suis confus entre le répertoire racine ou le dossier de l'application.

Merci.

Version 2: Maintenant, après la suggestion de M. Michael, j'ai essayé de le mettre en œuvre en utilisant la fonction de redirection comme ceci:

fonction du contrôleur par défaut: home.php

function __construct() 
{ 
    // Call the Model constructor 
    parent::__construct(); 
    $this->load->model('common_model'); 
    $this->handle_redirects(); 
} 

function handle_redirects() 
{ 
    $redirects = Array(
    'gorgeous-girls.php' => 'home/category_images/9' 
    ); 
    $uri = implode('/', $this->uri->segments); 
    foreach ($redirects as $from => $to) 
    { 
     $from = str_replace(':any', '.+', str_replace(':num', '[0-9]+', $from)); 
     if (preg_match("#^{$from}$#i", $uri)) 
     { 
     if (strpos($to, '$') !== false and strpos($from, '(') !== false) 
      $to = preg_replace("#^{$from}$#i", $to, $uri); 
     redirect($to , 'location', 301); 
     } 
    } 
} 

Et mes regards .htaccess comme:

RewriteEngine On 
RewriteBase/
RewriteCond $1 !^(index.php|resources|robots.txt) 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php?/$1 [L] 

PS: J'ai supprimé index.php de ma structure de nom de domaine. Cela ressemble à: www.example.com/controller/function/uri/uri

Maintenant, je ne reçois pas une page d'erreur de mon hôte, mais j'obtiens une page d'erreur de CodeIgniter.

Aidez-nous s'il vous plaît.

Répondre

0

Vous n'utilisez pas le nom de domaine complet dans la partie de correspondance de la règle de réécriture. Essayez ceci:

RewriteRule ^pagename.php$ /index.php/home/category_images/9 [L,R=301] 

Bien sûr, vous aurez probablement besoin d'autres règles pour le serveur de comprendre que index.php est le fichier qui doit être appelé, pas quelque chose à /image.php/home/category_images/9

Alors peut-être une seconde règle comme

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

Je viens de remarquer que, dans votre réponse à jour que vous essayez de rediriger de www.example.com à example.com. Si vous ne voulez forcer un domaine, vous devriez probablement ajouter une autre règle dans votre .htaccess avant l'une des autres règles mentionnées comme ceci:

RewriteCond %{HTTP_HOST} ^www.example.com$ 
Rewrite Rule ^(.*)$ http://example.com/$1 [L,R=301] 
+0

Voici à quoi ressemble mon code pour le fichier htaccess maintenant et il ne fonctionne toujours pas? :( RewriteEngine On RewriteBase/ RewriteCond% {HTTP_HOST}^www.example.com $ Règle^Rewrite (. *) $ Http://example.com/$1 [L, R = 301] RewriteCond % {REQUEST_FILENAME}! -d RewriteCond% {REQUEST_FILENAME}! -f RewriteRule^index.php /(.*) /index.php?q=$1 [L] RewriteRule^en page nom.php $/index .php/home/category_images/9 [L, R = 301] Et j'ai placé mon fichier .htaccess dans le dossier Application. Des idées ? –

+0

@VinaySinghal Les règles .htaccess ne fonctionnent pas du tout ou seulement une règle? La raison pour laquelle je demande est que vous devrez peut-être définir votre fichier apache conf principal à AllowOverride. Sans cela, les fichiers .htaccess sont simplement ignorés. –

+0

Monsieur, je suis très nouveau au développement. Je n'ai aucune idée à ce sujet. Je ne sais pas lequel travaille et lequel ne l'est pas. Si vous me demandez, je peux effectuer le test. Aussi le site Web héberge sur un compte d'hébergement partagé de 1and1.com –

0

vous pouvez vous ouvrir Xampp/apache/conf/httpd.conf

Après, puis vérifiez la ligne ci-dessous

#LoadModule rewrite_module modules/mod_rewrite.so 

si Hash (#) existent dans la ligne ci-dessus. puis retirez-le.

LoadModule rewrite_module modules/mod_rewrite.so 

et redémarrez votre serveur apache et vérifiez votre site. Après le site ne fonctionne pas s'il vous plaît laissez-moi savoir.

+0

Monsieur, le mod_rewrite est activé et non commenté dans ce fichier également, et mon serveur de site Web où je l'ai hébergé, est également activé. Cela ne marche toujours pas. Maintenant j'essaye: - RewriteEngine Sur RewriteBase/RewriteCond% {HTTP_HOST}^www.example.com $ Règle de réécriture^(. *) $ Example.com/$1 [L, R = 301] RewriteCond% {REQUEST_FILENAME}! -d RewriteCond% {REQUEST_FILENAME}! -f RewriteRule^index.php /(.*) /index.php?q=$1 [L] RewriteRule^nom-page.php $ /index.php/home/category_images/9 [ L, R = 301] Cela ne fonctionne pas non plus. –

+0

s'il vous plaît voir mon commentaire ci-dessus –

2

Considérant que votre fichier Hypertext L'accès doit être routage tout par index.php de toute façon, il est préférable de gérer vos redirections en utilisant la fonction redirect() de CodeIgniter.

Un exemple est fourni ci-dessous, en fonction de ce que j'ai dans mon page contrôleur, dans mes propres extensions de cadre (il peut être utilisé partout où la fonction redirect() est disponible, ainsi que $this->uri->segments.

function handle_redirects() { 
    $redirects = Array(
     'pagename.php' => 'home/category_images/9' 
    ); 
    $uri = implode('/', $this->uri->segments); 
    foreach ($redirects as $from => $to) 
    { 
     $from = str_replace(':any', '.+', str_replace(':num', '[0-9]+', $from)); 
     if (preg_match("#^{$from}$#i", $uri)) 
     { 
      if (strpos($to, '$') !== false and strpos($from, '(') !== false) 
       $to = preg_replace("#^{$from}$#i", $to, $uri); 
      redirect($to , 'location', 301); 
     } 
    } 
} 

Si vous deviez passer une requête à votre pagename.php fichier dans votre cadre, vous pourriez envisager les éléments suivants (notez que je ne sais pas ce que l'intention de vos pages sont - c'est une solution générique):

$redirects = Array(
    'pagename.php?q=(:any)' => 'home/category_images/$1' 
); 

Par exemple:

http://example.com/pagename.php?q=9 

voulez-vous rediriger vers:

http://example.com/home/category_images/9 

Cette solution fonctionne pour moi très bien, et est très efficace quand il s'agit de la compatibilité multi-navigateur.

Notez que vos RewriteRules devraient ressembler à ceci, ou quelque chose de semblable à elle:

RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule (xml|txt|css|js|jpg|png|gif)$ - [L] 
RewriteRule .* index.php [L,QSA] 

Modifier: Ce qui précède a été modifié pour tenir compte des actifs. Fondamentalement, il indique à Apache de tout acheminer via index.php, à moins que ce soit un fichier qui existe et que les extensions soient spécifiées. (Ceci est une bonne pratique pour des raisons de sécurité.)

Modifier: Notez que vous ne devez pas inclure index.php dans votre URL comme il est dépouillé par le fichier .htaccess de toute façon.

Notez que j'utilise PHP 5.3 - bien que cette solution devrait fonctionner pour vous. S'il vous plaît laissez-moi savoir s'il y a des problèmes.

+0

Monsieur, je suis très nouveau à codeIgniter et même à PHP, je n'ai pas supprimé l'index.php de mon nom de domaine, cela signifie-t-il tout est acheminé à travers elle? –

+0

Et aussi, s'il vous plaît dites-moi comment l'utiliser, home.php est mon contrôleur par défaut, alors devrais-je faire une autre fonction avec ce code n'importe où dans home.php n'importe où, ou dois-je faire quelque chose de spécifique. Aussi, comment j'appelle cette fonction? Mon domaine d'utilisation est, les domaines que je veux rediriger sont une page statique de mon ancien site Web, qui a un bon référencement, et beaucoup de gens viennent à eux tous les jours, et je n'ai pas besoin de passer une requête à l'ancienne page. –

+0

@Vinay: À des fins de référencement, tout devrait être routé via index.php. Si vos règles de réécriture sont identiques à celles que j'ai affichées, placez la fonction dans votre contrôleur domestique. Ensuite, dans la fonction de construction des contrôleurs, ajoutez $ this-> handle_redirects(). Une fois que la fonction fonctionne, vous pouvez simplement ajouter les règles au tableau $ de redirections. En utilisant ces redirections, vous dites aux moteurs de recherche que vous avez modifié votre structure d'URI et que votre statut sur ces moteurs de recherche devrait rester le même. Faites-moi savoir si cela fonctionne pour vous. :) –

Questions connexes