У меня есть действие с именем contact в контроллере сайта, поэтому, когда я открываю его в браузере, URL отображается как: mysite.com/index.php/site/contact
Я хочу изменить его на имя представления действия, поэтому оно должно быть mysite.com/contact.php
, как это сделать ?
Чтобы удалить index.php из URL, вам нужно добавить 'showScriptName' => false
в массив компонентов urlManager в файле /protected/config/main.php:
// application components
'components'=>array(
...
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName'=>false,
'rules'=>array(
...
),
...
),
...
),
Это сделало бы маршрут для вашей постоянной страницы mysite.com/site/contact
, Для того, чтобы удалить /site
вам нужно отредактировать массив правил, что-то подобное может сработать;
// application components
'components'=>array(
...
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName'=>false,
'rules'=>array(
...
'<action:\w+>.php'=>'site/<action>',
...
),
...
),
...
),
Это будет означать URL mysite.com/contact.php
окажет сайт / контактный маршрут.
редактировать
В ответ на ваш вопрос «нет, я хочу, чтобы он отображал mysite.com/one, где один — идентификатор строки»:
Вы должны быть осторожны с такими правилами для коротких URL, так как такие общие правила будут использоваться другими путями и перенаправлять пользователя, когда вы не хотите, чтобы они были перенаправлены. Тем не менее, для перенаправления mysite/one
в mysite/mycontroller/myaction?id=one
вы могли бы использовать '<id:\w+>'=>'mycontroller/myaction'
Но, как я уже сказал, будьте осторожны, это перенаправит все с одним словом пути. например, возьмите этот сценарий:
user
index
действие user
контроллер (маршрут user/index
)mysite.com/user
(что обычно делает mysite.com/user/index
)Это теперь вместо этого перенаправит пользователя на mysite/mycontroller/myaction?id=user
Других решений пока нет …