2

変更する必要があります

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

http://mysite.com/user/nick

CodeIgniterルーティングを使用します。次の行をに追加しましたroutes.phpが、機能しません。

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

これが私が使用する.htaccessファイルです:

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

どうすればこの問題を解決できますか?前もって感謝します。

編集:

URL構造が変わるということです。したがって、ルーティング後にリダイレクトする必要があります

http://mysite.com/user/nick

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

3 に答える 3

1

リダイレクトを処理する htaccess ルール:

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

Route.php の変更:

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

プロファイル コントローラ:

<?php
class Profile extends CI_Controller {

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

ただし、この種のリダイレクトは、変更しても意味のないキャッシュされたリンクが多数ある場合にのみ意味があります。あなたの質問から、ルーティングとリダイレクトの概念を混乱させているように思えます。


編集:(「リダイレクト」ではなく)「ルーティング」するには、次の手順を実行します。

要求を内部的に再ルーティングする htaccess ルール:

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

Route.php:

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

コントローラ:

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

それがうまくいかない場合は、まあ、問題を説明するのにひどい仕事をしています:)。

于 2012-04-09T16:23:04.347 に答える
0

最も可能性の高い問題は、?が 1 または 0 のいずれかを意味する正規表現言語の特殊文字であることです。一致させるにはエスケープする必要があります。次のようにして問題を解決する必要があります。 $route['user/(:any)'] = "profile\?username=$1";

于 2012-04-09T13:48:10.437 に答える