2012-04-09 16 views
2

Routing Ich braucheFragezeichen in CodeIgniter Mit

http://mysite.com/profile?username=nick 

zu

http://mysite.com/user/nick 

mit CodeIgniter Routing zu ändern. Ich füge die folgende Zeile routes.php, aber es funktioniert nicht:

$route['user/(:any)'] = "profile?username=$1"; 

Hier ist die .htaccess-Datei, die ich benutze:

RewriteEngine on 
RewriteCond $1 !^(index\.php|resources|robots\.txt) 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?/$1 [L,QSA] 
AddDefaultCharset utf-8 

Wie kann ich dieses Problem lösen? Danke im Voraus.

EDIT:

ich URL-Struktur Wechsel bedeuten. So nach dem Routing muss es umleiten

http://mysite.com/user/nick 

zu

http://mysite.com/profile?username=nick 

Antwort

0

Das Problem der meisten ist wahrscheinlich, dass die ? ist ein Sonderzeichen in der Bedeutung Sprache für reguläre Ausdrücke entweder 1 oder 0. Sie benötigen, um es zu entkommen, damit es übereinstimmt, sollte so etwas dein Problem lösen: $route['user/(:any)'] = "profile\?username=$1";

0

Okay, du willst es anders herum machen. Versuchen:

RewriteRule user/([^/?]+) index.php/profile?username=$1 [L] 

Sorry, wenn dies nicht funktioniert, mein Apache arbeitet nicht. nur diese Art der Umleitung:

RewriteRule user/([^/?]+) /profile?username=$1 [L,R=301] 

Route.php Änderung:

<?php 
$route['profile'] = 'profile/index'; 

Profil Controller:

<?php 
class Profile extends CI_Controller { 

    public function index() 
    { 
     $username = $this->input->get('username'); 
     // do lookup based on username 
    } 
} 

JEDOCH

1

.htaccess Regel die Umleitung zu handhaben macht Sinn, wenn man viel ca Ched-Links, die keinen Sinn ergeben. Es klingt nach Ihrer Frage, dass Sie die Konzepte von Routing und Redirect verwirren könnten.


EDIT: Um "route" (und nicht "redirect"), hier sind die Schritte:

.htaccess-Regel intern neu geroutet Anfragen:

RewriteRule /profile?username=([^&]*) index.php/user/$1 [L] 

Strecke.php:

<?php 
$route['user/(:any)'] = 'user/index/$1'; 

Controller:

<?php 
class User extends CI_Controller { 
    public function index($username) 
    { 
     // ... 
    } 
} 

Wenn das nicht, dann funktioniert, na ja, du bist eine schreckliche Arbeit tun, um Ihr Problem zu erklären :).

+0

Mit dem Wort "Umleitung", wenn Sie "Route" meinen, macht jede Antwort genau das Gegenteil von dem, was Sie wollen. Ich werde es bearbeiten. – landons