За последние 24 часа нас посетили 15587 программистов и 1554 робота. Сейчас ищут 935 программистов ...

Yii2: Проблема с UrlManager

Тема в разделе "PHP для новичков", создана пользователем ansta, 4 май 2017.

  1. ansta

    ansta Новичок

    С нами с:
    4 май 2017
    Сообщения:
    14
    Симпатии:
    0
    Здравствуйте! Столкнулась с такой проблемой: создала новый проект на yii2 из шаблона basic, создала два файла .htaccess, код которых взяла с GitHub. При раскомментировании в файле config/web.php блока, отвечающего за UrlManager, слетают все стили css и при попытке перехода по ссылкам выдает 404 ошибку. С чем это может быть связано? Кроме этих трех мест, ничего нигде больше не меняла.
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Я не могу посмотреть, что ты за htaccess-ы взяла, куда положила, как у тебя настроен сервер, если это всё на локалке и что у тебя в web.php. Выложи хотя бы последний и твои htaccess. И расскажи, куда Document Root смотрит. htaccess-ов для yii2 разных дофига на гитхабе можно раскопать. У меня с yii2 всегда самый элементарный
    Код (Text):
    1.  
    2. RewriteEngine on
    3. # If a directory or a file exists, use the request directly
    4. RewriteCond %{REQUEST_FILENAME} !-f
    5. RewriteCond %{REQUEST_FILENAME} !-d
    6. # Otherwise forward the request to index.php
    7. RewriteRule . index.php
    Но у меня Document Root смотрит обычно на папку web (которую переименовываю под хостера, когда клиент хочет на вирт. ставиться, например в www или public_html)
     
  3. ansta

    ansta Новичок

    С нами с:
    4 май 2017
    Сообщения:
    14
    Симпатии:
    0
    Стоит апач, DocumentRoot "c:/Apache24/htdocs"
    web.php:
    PHP:
    1. <?php
    2.  
    3. $params = require(__DIR__ . '/params.php');
    4.  
    5. $config = [
    6.     'id' => 'basic',
    7.     'basePath' => dirname(__DIR__),
    8.     'bootstrap' => ['log'],
    9.     'components' => [
    10.         'request' => [
    11.             // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
    12.             'cookieValidationKey' => 'asdsddsda',
    13.          
    14.         ],
    15.         'cache' => [
    16.             'class' => 'yii\caching\FileCache',
    17.         ],
    18.         'user' => [
    19.             'identityClass' => 'app\models\User',
    20.             'enableAutoLogin' => true,
    21.         ],
    22.         'errorHandler' => [
    23.             'errorAction' => 'site/error',
    24.         ],
    25.         'mailer' => [
    26.             'class' => 'yii\swiftmailer\Mailer',
    27.             // send all mails to a file by default. You have to set
    28.             // 'useFileTransport' to false and configure a transport
    29.             // for the mailer to send real emails.
    30.             'useFileTransport' => true,
    31.         ],
    32.         'log' => [
    33.             'traceLevel' => YII_DEBUG ? 3 : 0,
    34.             'targets' => [
    35.                 [
    36.                     'class' => 'yii\log\FileTarget',
    37.                     'levels' => ['error', 'warning'],
    38.                 ],
    39.             ],
    40.         ],
    41.         'db' => require(__DIR__ . '/db.php'),
    42.    
    43.         'urlManager' => [
    44.            'enablePrettyUrl' => true,
    45.            'showScriptName' => false,
    46.            'rules' => [
    47.            ],
    48.        ],
    49.        
    50.     ],
    51.     'params' => $params,
    52. ];
    53.  
    54. if (YII_ENV_DEV) {
    55.     // configuration adjustments for 'dev' environment
    56.     $config['bootstrap'][] = 'debug';
    57.     $config['modules']['debug'] = [
    58.         'class' => 'yii\debug\Module',
    59.         // uncomment the following to add your IP if you are not connecting from localhost.
    60.         //'allowedIPs' => ['127.0.0.1', '::1'],
    61.     ];
    62.  
    63.     $config['bootstrap'][] = 'gii';
    64.     $config['modules']['gii'] = [
    65.         'class' => 'yii\gii\Module',
    66.         // uncomment the following to add your IP if you are not connecting from localhost.
    67.         //'allowedIPs' => ['127.0.0.1', '::1'],
    68.     ];
    69. }
    70.  
    71. return $config;
    .htaccess в корне:
    PHP:
    1. Options +FollowSymLinks
    2. IndexIgnore */*
    3. RewriteEngine On
    4.  
    5. RewriteCond %{REQUEST_URI} !^/(web)
    6. RewriteRule ^assets/(.*)$ /web/assets/$1 [L]
    7. RewriteRule ^css/(.*)$ web/css/$1 [L]
    8. RewriteRule ^js/(.*)$ web/js/$1 [L]
    9. RewriteRule ^images/(.*)$ web/images/$1 [L]
    10. RewriteRule (.*) /web/$1
    11.  
    12. RewriteCond %{REQUEST_FILENAME} !-f
    13. RewriteCond %{REQUEST_FILENAME} !-d
    14. RewriteRule . /web/index.php
    .htaccess в папке web:
    PHP:
    1. RewriteBase /
    2.  
    3. RewriteCond %{REQUEST_FILENAME} !-f
    4. RewriteCond %{REQUEST_FILENAME} !-d
    5.  
    6. RewriteRule . index.php
    --- Добавлено ---
    Стоит апач, DocumentRoot "c:/Apache24/htdocs"
    web.php:
    PHP:
    1. <?php
    2.  
    3. $params = require(__DIR__ . '/params.php');
    4.  
    5. $config = [
    6.     'id' => 'basic',
    7.     'basePath' => dirname(__DIR__),
    8.     'bootstrap' => ['log'],
    9.     'components' => [
    10.         'request' => [
    11.             // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
    12.             'cookieValidationKey' => 'asdsddsda',
    13.          
    14.         ],
    15.         'cache' => [
    16.             'class' => 'yii\caching\FileCache',
    17.         ],
    18.         'user' => [
    19.             'identityClass' => 'app\models\User',
    20.             'enableAutoLogin' => true,
    21.         ],
    22.         'errorHandler' => [
    23.             'errorAction' => 'site/error',
    24.         ],
    25.         'mailer' => [
    26.             'class' => 'yii\swiftmailer\Mailer',
    27.             // send all mails to a file by default. You have to set
    28.             // 'useFileTransport' to false and configure a transport
    29.             // for the mailer to send real emails.
    30.             'useFileTransport' => true,
    31.         ],
    32.         'log' => [
    33.             'traceLevel' => YII_DEBUG ? 3 : 0,
    34.             'targets' => [
    35.                 [
    36.                     'class' => 'yii\log\FileTarget',
    37.                     'levels' => ['error', 'warning'],
    38.                 ],
    39.             ],
    40.         ],
    41.         'db' => require(__DIR__ . '/db.php'),
    42.    
    43.         'urlManager' => [
    44.            'enablePrettyUrl' => true,
    45.            'showScriptName' => false,
    46.            'rules' => [
    47.            ],
    48.        ],
    49.        
    50.     ],
    51.     'params' => $params,
    52. ];
    53.  
    54. if (YII_ENV_DEV) {
    55.     // configuration adjustments for 'dev' environment
    56.     $config['bootstrap'][] = 'debug';
    57.     $config['modules']['debug'] = [
    58.         'class' => 'yii\debug\Module',
    59.         // uncomment the following to add your IP if you are not connecting from localhost.
    60.         //'allowedIPs' => ['127.0.0.1', '::1'],
    61.     ];
    62.  
    63.     $config['bootstrap'][] = 'gii';
    64.     $config['modules']['gii'] = [
    65.         'class' => 'yii\gii\Module',
    66.         // uncomment the following to add your IP if you are not connecting from localhost.
    67.         //'allowedIPs' => ['127.0.0.1', '::1'],
    68.     ];
    69. }
    70.  
    71. return $config;
    .htaccess в корне:
    PHP:
    1. Options +FollowSymLinks
    2. IndexIgnore */*
    3. RewriteEngine On
    4.  
    5. RewriteCond %{REQUEST_URI} !^/(web)
    6. RewriteRule ^assets/(.*)$ /web/assets/$1 [L]
    7. RewriteRule ^css/(.*)$ web/css/$1 [L]
    8. RewriteRule ^js/(.*)$ web/js/$1 [L]
    9. RewriteRule ^images/(.*)$ web/images/$1 [L]
    10. RewriteRule (.*) /web/$1
    11.  
    12. RewriteCond %{REQUEST_FILENAME} !-f
    13. RewriteCond %{REQUEST_FILENAME} !-d
    14. RewriteRule . /web/index.php
    .htaccess в папке web:
    PHP:
    1. RewriteBase /
    2.  
    3. RewriteCond %{REQUEST_FILENAME} !-f
    4. RewriteCond %{REQUEST_FILENAME} !-d
    5.  
    6. RewriteRule . index.php
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    document_root должен быть настроен на папку web
     
  5. ansta

    ansta Новичок

    С нами с:
    4 май 2017
    Сообщения:
    14
    Симпатии:
    0
    Исправила на "C:\Apache24\htdocs\yii2.loc\web" - не помогло(
     
  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    эта проблема осталась?

    какой сейчас .htaccess в папке web? mod_rewrite включён у apache?
    --- Добавлено ---
    что значит слетают? Куда они ссылаются и что вместо них тогда?
    --- Добавлено ---
    отладка/debug
    http://phpfaq.ru/debug
    https://netbeans.org/kb/docs/php/debugging_ru.html
    https://php.ru/forum/threads/howto-...i-po-shagam-i-s-kartinkami.58974/#post-474550
     
  7. ansta

    ansta Новичок

    С нами с:
    4 май 2017
    Сообщения:
    14
    Симпатии:
    0
    Нет, заработали все ссылки, кроме одной почему-то, она выдает ошибку Invalid Configuration – yii\base\InvalidConfigException. Either GD PHP extension with FreeType support or ImageMagick PHP extension with PNG support is required.
    .htaccess в папке web не меняла, он такой же, как кидала выше.
    mod_rewrite включен.
    Css находятся в папке /yii2.loc/web/css/site.css, при запуске проекта такая картина:
    upload_2017-5-4_22-24-39.png
     
  8. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    браузер этот css откуда пытается загрузить и другие? Можно посмотреть в исходном коде страницы в браузере
    --- Добавлено ---
    document_root должен был быть на папку web настроен, а не на C:\Apache24\htdocs
    Может нужно apache перезагрузить, чтобы новые настройки вошли в силу?
     
  9. ansta

    ansta Новичок

    С нами с:
    4 май 2017
    Сообщения:
    14
    Симпатии:
    0
    Он оттуда и пытается загрузить, где они находятся, но он их почему-то не видит:
    <link href="/assets/1822e61a/css/bootstrap.css" rel="stylesheet">
    <link href="/yii2.loc/web/css/site.css" rel="stylesheet"></head>
    Прописала c:/Apache24/htdocs/yii2.loc/web в document_root , я правильно поняла? Теперь он даже главную страницу не видит
    Конечно я перезагружаю каждый раз)
     
  10. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    В чём это выражается? Может в apache error log об этом что-то написано?

    Ну вроде путь правильный

    Это после того как document_root была сделана папка web?

    Да, правильно

    Это хорошо

    Что по этим ссылкам выдаёт браузер? Сходи по ним
     
    ansta нравится это.
  11. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Ой, что-то тут всё непросто. Я стараюсь, чтоб ситуация на локалке была аналогичной потом на хостинге. Поэтому, прежде чем начинать проект, прописываю домен в hosts, а также в конфиге апача (у меня XAMPP, в нём нету автоматизации, но мне не трудно прописать). Document Root - на папку web (public_html, www - переименовываю в зависимости от хостига, уже писал). После этого всё просто. В корневой папке проекта htaccess нафиг не сдался, в папке web достаточно элементарного, который уже привёл. И все ссылки - нормальные относительные ссылки, как и должны быть. Типа
    Код (Text):
    1. /css/site.css
    --- Добавлено ---
    Большой htaccess, который ты привела - это для хостингов, которые не позволяют записывать ничего выше document root. Но в таком случае document root у них на корне сайта, а не где попало. У тебя какой-то непорядок с прописыванием домена явно. Покажи конфиг апача для этого домена (не весь, именно для домена)
     
    ansta нравится это.
  12. ansta

    ansta Новичок

    С нами с:
    4 май 2017
    Сообщения:
    14
    Симпатии:
    0
    Все сделала, как вы сказали, убрала из корня .htaccess, а в папке web прописала такой (ваш не помог):
    PHP:
    1. Options +FollowSymLinks
    2. IndexIgnore */*
    3. RewriteEngine on
    4.  
    5. RewriteCond %{REQUEST_URI} !^/(web)
    6. RewriteRule (.*) /web/$1
    7. RewriteCond %{REQUEST_FILENAME} !-f
    8. RewriteCond %{REQUEST_FILENAME} !-d
    9. RewriteRule . /web/index.php
    Все работает, css подключилось, по ссылкам переходит) Огромное спасибо!
    --- Добавлено ---
    Спасибо за ответы, проблема решена.
     
  13. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Не, что-то у тебя с настройками домена на локалке не то, выложи конфиг, который я просил (httpd-vhosts.conf обычно). Потому, что я вижу сейчас - это могут быть проблемы при переносе на хостинг
    --- Добавлено ---
    И в дальнейшем темы по Yii пиши сюда: https://php.ru/forum/forums/yii.48/
     
  14. ansta

    ansta Новичок

    С нами с:
    4 май 2017
    Сообщения:
    14
    Симпатии:
    0
    PHP:
    1. NameVirtualHost *:80
    2. <VirtualHost *:80>
    3.    DocumentRoot "C:/Apache24/htdocs/yii2.loc/web"
    4.    ServerName localhost
    5.    ErrorLog "C:/Apache24/logs/error.log"
    6.    CustomLog "C:/Apache24/logs/access.log" common
    7. </VirtualHost>
     
  15. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    А почему новый домен не завела? И при таком document root странно, что приходится ещё раз прописывать папку web в htaccess. Вот как я делаю:
    Код (Text):
    1.  
    2. <VirtualHost *:80>
    3.     ServerAdmin webmaster@dummy-host2.example.com
    4.     DocumentRoot "E:/xampp-new/htdocs/nerud/web"
    5.     ServerName nerud.lc
    6.     ErrorLog "E:/xampp-new/htdocs/nerud/error.log"
    7.     CustomLog "E:/xampp-new/htdocs/nerud/access.log" common
    8. </VirtualHost>
    И в файлике c:\windows\system32\drivers\etc\hosts у меня есть строчка
    Код (Text):
    1.  
    2. 127.0.0.1 nerud.lc
    После этого я пишу в браузере nerud.lc просто, и всё работает, и с тем htaccess, что я приводил
     
  16. ansta

    ansta Новичок

    С нами с:
    4 май 2017
    Сообщения:
    14
    Симпатии:
    0
    Сделала, работает.
     
  17. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Вот, и на каждый проект - по такому блоку прописываешь, и доменчик. Вроде Open Server это умеет сам, но он для меня слишком громоздкий. Вообще, я сейчас больше работаю с VPS-кой дешёвой, чем с локальным сервером, поэтому не меняю ничего.