Yii основной URL переписать

Я новичок в php, новичок в mvc, новичок в yii и новичок в переписывании URL. Итак, извините, если я спрашиваю что-то очень простое.

Я скрыл index.php (из метода htaccess, обсуждаемого на форумах yii)

В моем urlmanager у меня есть это,

'urlFormat'=>'path',
             'rules'=>array( 
             '<controller:\w+>/<id:\d+>'=>'view',
             '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
             '<controller:\w+>/<action:\w+>'=>'<controller>/<action>' 
              ),
             'showScriptName'=>false,

У меня 3 файла в папке view / site.

'поездка',«Пригласить»,'LinkedIn'

Теперь моя домашняя страница должна перенаправить на действие «путешествие» (то есть открыть «сайт / путешествие.php»)

Итак, я думаю, это было бы

'/' => 'site/journey'

Это тоже работает.

Теперь я хочу, чтобы «путешествие / приглашение» вызывало действие «пригласить», то есть открывать сайт / приглашение.php

И «travel / linkedin» должен вызывать действие «linkedin», то есть «site / linkedin.php».

но,

'journey/invite' => 'site/invite',
'journey/linkedin' => 'site/linkedin'

не работает.

Кроме того, кто-то может помочь мне понять это,

<controller:\w+>/<id:\d+>

то есть, что такое контроллер в URL и что означает «w +»?

Ссылка на руководство тоже поможет.

Отредактировано после предложения bool.dev:

Как вы сказали, изменил код (я тоже пробовал ранее, удалив все правила по умолчанию). Теперь мой менеджер URL похож,

    '/' => 'site/journey',
    'journey/invite' => 'site/invite',
    'journey/linkedin' => 'site/linkedin',
    '<controller:\w+>/<id:\d+>'=>'view',
    '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
    '<controller:\w+>/<action:\w+>'=>'<controller>/<action>', 

Но выдает ошибку

"Предупреждение: require_once (): действует ограничение open_basedir. Файл (/var/xyz.com /../ yii / framework / yii.php) находится за пределами разрешенного пути (путей): (/ usr / share / php: / USR / доли / груша: / USR / доли / PHP / libzend-каркасного PHP: / вар /*/tmp:/var/xyz.com) в /var/xyz.com/journey.php в строке 12 Предупреждение: require_once (/var/xyz.com /../ yii / framework / yii.php): не удалось открыть Поток: операция не разрешена в /var/xyz.com/journey.php в строке 12 Неустранимая ошибка: require_once (): не удалось открыть обязательное '/var/xyz.com/../yii/framework/yii.php' (include_path) = '.: / usr / share / php: / usr / share / php / libzend-framework-php') в /var/xyz.com/journey.php в строке 12 '

когда я делаюxyz.com/journey/invite или дажеxyz.com/journey

Редактировать:

Это была проблема с разрешением, сработало предложение @ bool.dev поставить конкретные правила :)

 bool.dev26 мар. 2012 г., 22:59
ваш htaccess выглядит нормально, я думаю, что это проблемаopen_basedir restrictionтак что взгляните на это. первоначальный поиск в Google привел кstackoverflow.com/questions/7328523/... , извини, я не знаю много об этом. После того, как вы решили эту проблему, я думаю, что все будет хорошо.
 bool.dev26 мар. 2012 г., 23:08
на некоторых других поисках Google, я нашел больше ссылок наopen_basedir restriction в YII, так что у вас не должно быть никаких проблем в получении решения.
 Jashwant26 мар. 2012 г., 22:40
Мой файл htaccess имеет этот код, чтобы скрыть файл index.php.Options +FollowSymLinks IndexIgnore */* RewriteEngine on # if a directory or a file exists, use it directly RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # otherwise forward it to index.php RewriteRule . index.php
 Jashwant26 мар. 2012 г., 22:33
Я тоже не работал. Он работает с обычным синтаксисом, но выдает ошибку в маршрутизации URL. Я могу легко открытьxyz.com/site/journey или жеxyz.com/site/invite ноxyz.com/journey или жеxyz.com/journey/invite выдает ошибку, указанную выше.
 bool.dev26 мар. 2012 г., 22:26
хорошо, что происходило, когда это не работало, прежде чем вы добавили мои предложения? Я имею в виду, каким образом это не работает? вам показали какие-либо ошибки?

Ответы на вопрос(1)

Решение Вопроса

Эти двое:

'journey/invite' => 'site/invite',
'journey/linkedin' => 'site/linkedin'

не работают, потому что URL соответствует предыдущему правилу:

'<controller:\w+>/<action:\w+>'=>'<controller>/<action>'

Чтобы этого не происходило, просто убедитесь, что правило упоминается последним, прежде чем какие-либо конкретные (то есть не соответствующие регулярным выражениям) перезаписываются, чтобы ваши правила могли выглядеть примерно так:

'journey/invite' => 'site/invite',
'journey/linkedin' => 'site/linkedin',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>'

Этот :\w+ означает сопоставление любой строки с одним или несколькими вхождениями любого символа «слово» (a-z 0-9 _) и\d+ означает сопоставление любой строки с одним или несколькими вхождениями любых цифр (0-9). Проверять, выписыватьсяPHP регулярное выражение.

редактировать

Если бы вы не прочитали ваш вопрос раньше,controller в правиле это просто имя для сопоставленного выражения, так что вы могли бы иметь'<contr:\w+>/<act:\w+>'=>'<contr>/<act>'.

Edit2

После прочтения отредактированного вопроса с массивом правилНасколько мне известно вы могли бы использовать''=>'site/journey' вместо'/'=>'site/journey'.

 bool.dev26 мар. 2012 г., 22:05
надеюсь, это поможет .. попросите разъяснений, если это необходимо
 bool.dev26 мар. 2012 г., 23:19
Я предполагаю, что мое второе редактирование может удалить ошибку open_basedir, не уверен. в любом случае, попробуйте сначала решить ошибку open_basedir, а затем предложения должны работать.
 Jashwant26 мар. 2012 г., 22:23
Отредактировал мой вопрос после вашего ответа. Проверьте это.

Ваш ответ на вопрос