Yii2 Пользовательское управление URL-адресами. Получение ошибки 400

Ну, времена PHP.

Мой клиент хочет, чтобы я использовал Yii2 в качестве основы для своего проекта.

Я получил его и работает. Без проблем. Я использовал расширенный шаблон через composer.

Установите для моего веб-корня значение /frontend/web и т. д.

СЕЙЧАС, я хочу использовать этот формат URL

website.com/messages/ или website.com/messages/tom... и т. д.

Прямо сейчас установка показывает website.com/index.php?r=messages/index...

Я нашел эту документацию...

https://github.com/yiisoft/yii2/blob/master/docs/guide/url.md

Но я не могу понять это прямо.

Вот мои шаги...

Я настроил свой сервер Apache так, чтобы он указывал на /usr/www/payroll/frontend/web/

Я добавил в свою веб-папку файл .htaccess с этим содержимым.

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

Я также добавил компонент «urlManager», как в направлениях. Кажется, он перехватывает запрос и модифицирует его.

'components'=>[
    'urlManager' => [
            'class' => 'yii\web\UrlManager',
            'enablePrettyUrl' => true,
            'showScriptName' => 'false'
        ],
],

Например, если я наберу веб-сайт.com, вы увидите, что он добавляет /site/index к URL-адресу. (без активного компонента URL он просто добавляет /index.php?site/index)

Итак, очевидно, что URL-адрес был изменен (через UrlManager), но я получаю ошибку 404.

У меня заканчиваются идеи здесь. Я новичок в Php, Apache и Yii2. Любая помощь, с благодарностью.

Спасибо


person Pepito Fernandez    schedule 10.04.2014    source источник
comment
Я не понимаю, работает ли какая-либо страница сайта?   -  person Alex    schedule 10.04.2014
comment
Если я добавлю заглушку кода компонентов в свой файл конфигурации, это не так.   -  person Pepito Fernandez    schedule 11.04.2014
comment
Независимо от того, что я делаю, он никогда не показывает веб-сайт.com/controller/action.... если я добавляю код компонента в свою конфигурацию, он даже не работает так, как должен по умолчанию... то есть веб-сайт.com/index .php?r=контроллер/действие   -  person Pepito Fernandez    schedule 11.04.2014
comment
'showScriptName' => 'false' должно быть 'showScriptName' => false   -  person Alex    schedule 11.04.2014
comment
Извините, это опечатка здесь, а не в коде. В моем коде вместо «ложь» отображается ложь.   -  person Pepito Fernandez    schedule 11.04.2014


Ответы (5)


Чтобы красивый URL работал на Yii 2.0, вам нужны 2 вещи:

1: Отредактируйте /frontend/config/main.php (или соответствующий основной конфиг в вашем случае) и добавьте:

'components'=>[
        'urlManager' => [
                'class' => 'yii\web\UrlManager',
                'enablePrettyUrl' => true,
                'showScriptName' => false,
            ],
    ],

2: Добавьте файл .htaccess в папку ВАШ ВЕБ-КОРЕНЬ. В yii 2.0 advanced это НЕ корневая директория проекта, а вместо этого: /frontend/web

Пример .htaccess:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule . index.php
person d.raev    schedule 16.07.2014
comment
Если кто-то использует базовый шаблон Yii2, основной файл конфигурации — basic/config/web.php. Спасибо. - person Gaston Sanchez; 07.01.2015
comment
@GastónSánchez ты имел в виду project_root_dir/config/web.php ? - person d.raev; 07.01.2015
comment
'showScriptName' => 'false' должно быть 'showScriptName' => false - person Moamen Mostafa; 24.01.2015

просто измените 'showScriptName' => 'false' на 'showScriptName' => false, и все заработает.

person Goo    schedule 17.08.2014

Если вы хотите использовать http://domain.com/controller_name/action_name таким образом, вам нужно только включить красивый URL-адрес в вашем файле конфигурации:

'components'=>[
    'urlManager' => [
            'class' => 'yii\web\UrlManager',
            'enablePrettyUrl' => true,
            'showScriptName' => 'false'
        ],
],

Теперь вы можете использовать URL-адреса по своему усмотрению: «website.com/messages/» или «website.com/messages/tom».

Если вы хотите использовать строку запроса в своем URL-адресе, вот как это работает сейчас в Yii 2 website.com/message?id=12

person KB9    schedule 10.04.2014

Хорошо, вот решение.

В последней версии Apache (начиная с 2.3.9) для параметра AllowOverride по умолчанию установлено значение NONE. В предыдущих версиях параметру AllowOverride было присвоено значение ВСЕ.

Yii2 предполагает, что AllowOverride будет установлен на ВСЕ.

Если вы хотите прочитать всю ветку на форуме Yii, вот ссылка

http://www.yiiframework.com/forum/index.php/topic/53295-url-manager-for-seo-friendly-url-404-error-code/

Спасибо за вашу помощь и сообщения!

person Pepito Fernandez    schedule 11.04.2014

Для базового Yii2 я просто добавил приведенные ниже коды в /myappfolder/config/web.php:

'Менеджер URL' => [

'класс' => 'yii\web\UrlManager',

'enablePrettyUrl' => правда,

'showScriptName'=>ложь,

]

Также добавлен .htaccess в /myappfolder/web/:

RewriteEngine включен

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

Правило перезаписи. index.php

Это хорошо работает для меня. Надеюсь, это поможет другим, у кого такая же проблема. :)

person puppyceceyoyo    schedule 23.10.2014