私はStackoverflowとYIIフォーラムの周りを検索してきました.多くの答えがありますが、役に立たなかった...
これは私の場合です。
projというコントローラーとviewというアクションがあります。id (int)、name (string)を取得します。
[ +,!#$%^&*- ]のような特別な文字が含まれる場合があります。
したがって、createUrl()関数を実行すると、あまりフレンドリーではない URL が返されます。
id = 1029 name = 南アフリカ、ヘルマナス、バーモント塩田システムの保護。
結果を次のようにしたい: http://www.qa-mysite.com/proj/1029/conservation-of-the-vermont-salt-pan-system-hermanus-south-Africa
実際には、特殊文字を取り除き、スペース間の区切り文字を「+」ではなく「-」に変更する必要があります。
curlManager の現在の構成は次のとおりです。
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName'=>false,
'appendParams' => true,
'rules'=>array(
//array('proj/view/<name:\w+>', 'pattern'=>'proj/<id:\d+>'),
//'<controller:\w+>/<id:\d+>'=>'<controller>/view',
'proj/<id:\d+>/<name:\w+>'=>array('proj/view', 'caseSensitive'=>false),
'<controller>/<id:\d+>/<name:.*?>'=>'<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
),
)
CreateUrl の例:
$this->createUrl('proj/view', array('id' => $data->id, 'name' => $data->name));
URL が変更された後、古い URL を新しい seo に適した URL に301 リダイレクトする必要があります。
注: ハードコーディングされた str_replace は実行できません。
助けてくれてありがとう:]