2010-07-31 6 views
1

Je suis assez nouveau pour mod-réécritures, et je vais avoir du mal à obtenir ce droit:Mod Rewrite Débutant dans CodeIgniter

Je voudrais http://myurl.com/special et http://www.myurl.com/special à la fois rediriger vers http://myurl/index.php/special sans changer l'URL pour la visiteur dans leur navigateur.

actuellement, mon .htaccess ressemble à ceci, pour supprimer www des URL

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteCond %{HTTP_HOST} ^www.myurl.com [NC] 
RewriteRule ^(.*)$ http://myurl.com/$1 [L,R=301] 
</IfModule> 

j'ai essayé un tas de choses différentes pour rediriger l'URL spéciale, mais rien n'a fonctionné pour moi jusqu'à présent, chacun avec un résultat indésirable différent. S'il vous plaît laissez-moi savoir si vous avez une idée de ce que je peux ajouter ici!

J'ai essayé ceci:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^special$ /index.php/special$1 [NC] 
RewriteCond %{HTTP_HOST} ^www.myurl.com [NC] 
RewriteRule ^(.*)$ http://myurl.com/$1 [R=301] 
</IfModule> 

Cela fait redirigent http://myurl.com/special au contrôleur par défaut, et fait http://www.myurl.com/special redirigent à http://myurl.com/index.php/special et change l'URL dans le navigateur. Aucun d'entre eux n'a raison, même si le second est plus proche de ce dont j'ai besoin.

Répondre

2

oh non vous n'avez pas besoin htaccess faire cela utilise simplement les routes de CI. Ici d'abord changer votre htacess à ceci:

# Customized error messages. 
ErrorDocument 404 /index.php 

# Set the default handler. 
DirectoryIndex index.php 

# Various rewrite rules. 
<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ index.php/$1 [L,QSA] 
</IfModule> 

Celui-ci est ainsi beaucoup mieux et vous ne devez jamais changer quoi que ce soit pas img dossiers ou quoi que ce soit laisser juste pur. maintenant pour votre problème.

ouvre le fichier php dans le dossier Application-> config.

maintenant dans CI tous les parcours de fichiers via index.php par défaut donc je suppose que vous voulez dire votre contrôleur par défaut de toute façon d'acheminer « contrôleurs » comme dans votre cas particulier de retour sur le site principal ne ceci:

si votre contrôleur par défaut est toujours « bienvenue » car il est téléchargé, vous écririez une route comme ceci:

$route['special/(:any)'] = "welcome"; 

votre URL ne changera pas et tout sera parfait

MAIS DONT ARRÊT LECTURE POURTANT, JU ST POUR S'ASSURER:.

c'est ce que vos itinéraires ressembleraient après votre fait:

//these two are for CI 
$route['default_controller'] = "welcome"; 
$route['scaffolding_trigger'] = ""; 

//this is your route sending all and any traffic for special 
//no matter how many levels it will always go to welcome->index. 
$route['special/(:any)'] = "welcome"; 

//if you want to use sub-pages or other functions within your welcome controller 
//i.e. welcome->signup. then just send the route information to the controller like this: 
$route['special/(:any)'] = "welcome/$1"; 

La classe de routage en php est très puissant, ce qui est juste un morceau ici pour plus d'informations plus détaillées sur le routage voir cette page:

CodeIgniter User Guide -> URI Routing

Espérons vraiment que je ne vous ai pas embrouillé plus. Bonne chance

+0

Hey Brandon, merci pour la réponse rapide. La raison pour laquelle j'avais mon fichier .htaccess était que toutes les demandes à http://www.myurl.com redirigeaient vers http://myurl.com. Ce que j'ai besoin est pour que cela continue, mais en plus d'avoir toutes les demandes à http://myurl.com/special rediriger vers http://myurl.com/index.php/special. Plus d'aide vous pouvez fournir en faisant cela? J'ai essayé de modifier le htaccess et les fichiers de routes comme vous l'avez suggéré, mais cela n'a pas fonctionné. l'URL myurl.com/special a une page 404 Not Found. – itwasthewind

+0

J'ai réalisé que je n'avais pas défini l'htaccess exactement comme vous l'avez mentionné, et j'ai essayé, mais maintenant toute URL qui n'a pas index.php (comme myurl.com/special) montre juste le contrôleur par défaut. Une idée de pourquoi cela pourrait être? – itwasthewind

+0

avec le htaccess il est configuré pour faire à la fois myurl.com/index.php/special et myurl.com/special à la même page juste faire urls cleaner. mais je viens de réaliser ce qui se passait je suis tellement désolé je n'ai pas lu ça juste enlever la route que vous avez ajouté et cela fonctionnera parfaitement je suis désolé je pensais que vous vouliez avoir myurl.com/special aller à la page par défaut le htaccess l'aurait fait tout le long je suis désolé je devrais l'avoir lu de plus près laisser l'htaccess seul et juste enlever l'itinéraire que vous avez ajouté. laissez-moi savoir si cela a fonctionné. – BrandonS

1

En supposant www.myurl.com et myurl.com sont à la fois mis en place comme ServerAliases dans votre VirutalHost, alors quelque chose d'aussi simple que ...

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^(.*)$ index.php/$1 [L] 
</IfModule>