Через yii средствами роута
в config/yii
'components'=>array(
...
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName'=>false,
'rules'=>array(
'/'=>'',
array('/aaa/default/index/id/58058', 'caseSensitive'=>false, 'pattern' => 'aaa', 'verb' => 'GET', 'parsingOnly' => true),
array('/bbb/default/index', 'caseSensitive'=>false, 'pattern' => 'bbb.php', 'verb' => 'GET', 'parsingOnly' => true),
array('/bbb/default/index', 'caseSensitive'=>false, 'pattern' => 'bbb', 'verb' => 'GET', 'parsingOnly' => true),
array('/ccc/default/index', 'caseSensitive'=>false, 'pattern' => 'ccc', 'verb' => 'GET', 'parsingOnly' => true),
),
),
),
тогда по
mysite.ru/aaa -> вызовет модуль aaa, котролер default, action index.
повесить на 404 обработчик
'components'=>array(
...
'errorHandler' => array(
// use 'site/error' action to display errors
'errorAction' => 'site/error',
),
),
вызовет контроле site, метод error
там уже проверяем что выводить зависмости от кода ошибки
public function actionError()
{
$error=Yii::app()->errorHandler->error;
if($error) {
if(Yii::app()->request->isAjaxRequest){
echo $error['message'];
Yii::app()->end();
} else {
if(!empty($error['code']) && $error['code'] == 404 && !empty($error['traces'][0]['args'][0]))
{
echo 'Query : '.$error['traces'][0]['args'][0];
$this->redirect(array('bbb/index','str'=>$error['traces'][0]['args'][0]));
}
echo $error['message'];
}
}
в nginx:
location / {
try_files $uri $uri/ /index.php?$args;
root /var/www/site;
index index.php index.html index.htm;
}
location ~ \.php$ {
try_files $fastcgi_script_name =404;
include /etc/nginx/fastcgi_params;
fastcgi_pass PollFPM;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/site$fastcgi_script_name;
}