Здравствуйте! Столкнулась с такой проблемой: создала новый проект на yii2 из шаблона basic, создала два файла .htaccess, код которых взяла с GitHub. При раскомментировании в файле config/web.php блока, отвечающего за UrlManager, слетают все стили css и при попытке перехода по ссылкам выдает 404 ошибку. С чем это может быть связано? Кроме этих трех мест, ничего нигде больше не меняла.
Я не могу посмотреть, что ты за htaccess-ы взяла, куда положила, как у тебя настроен сервер, если это всё на локалке и что у тебя в web.php. Выложи хотя бы последний и твои htaccess. И расскажи, куда Document Root смотрит. htaccess-ов для yii2 разных дофига на гитхабе можно раскопать. У меня с yii2 всегда самый элементарный Код (Text): RewriteEngine on # If a directory or a file exists, use the request directly RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # Otherwise forward the request to index.php RewriteRule . index.php Но у меня Document Root смотрит обычно на папку web (которую переименовываю под хостера, когда клиент хочет на вирт. ставиться, например в www или public_html)
Стоит апач, DocumentRoot "c:/Apache24/htdocs" web.php: PHP: <?php $params = require(__DIR__ . '/params.php'); $config = [ 'id' => 'basic', 'basePath' => dirname(__DIR__), 'bootstrap' => ['log'], 'components' => [ 'request' => [ // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation 'cookieValidationKey' => 'asdsddsda', ], 'cache' => [ 'class' => 'yii\caching\FileCache', ], 'user' => [ 'identityClass' => 'app\models\User', 'enableAutoLogin' => true, ], 'errorHandler' => [ 'errorAction' => 'site/error', ], 'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', // send all mails to a file by default. You have to set // 'useFileTransport' to false and configure a transport // for the mailer to send real emails. 'useFileTransport' => true, ], 'log' => [ 'traceLevel' => YII_DEBUG ? 3 : 0, 'targets' => [ [ 'class' => 'yii\log\FileTarget', 'levels' => ['error', 'warning'], ], ], ], 'db' => require(__DIR__ . '/db.php'), 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules' => [ ], ], ], 'params' => $params, ]; if (YII_ENV_DEV) { // configuration adjustments for 'dev' environment $config['bootstrap'][] = 'debug'; $config['modules']['debug'] = [ 'class' => 'yii\debug\Module', // uncomment the following to add your IP if you are not connecting from localhost. //'allowedIPs' => ['127.0.0.1', '::1'], ]; $config['bootstrap'][] = 'gii'; $config['modules']['gii'] = [ 'class' => 'yii\gii\Module', // uncomment the following to add your IP if you are not connecting from localhost. //'allowedIPs' => ['127.0.0.1', '::1'], ]; } return $config; .htaccess в корне: PHP: Options +FollowSymLinks IndexIgnore */* RewriteEngine On RewriteCond %{REQUEST_URI} !^/(web) RewriteRule ^assets/(.*)$ /web/assets/$1 [L] RewriteRule ^css/(.*)$ web/css/$1 [L] RewriteRule ^js/(.*)$ web/js/$1 [L] RewriteRule ^images/(.*)$ web/images/$1 [L] RewriteRule (.*) /web/$1 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /web/index.php .htaccess в папке web: PHP: RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php --- Добавлено --- Стоит апач, DocumentRoot "c:/Apache24/htdocs" web.php: PHP: <?php $params = require(__DIR__ . '/params.php'); $config = [ 'id' => 'basic', 'basePath' => dirname(__DIR__), 'bootstrap' => ['log'], 'components' => [ 'request' => [ // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation 'cookieValidationKey' => 'asdsddsda', ], 'cache' => [ 'class' => 'yii\caching\FileCache', ], 'user' => [ 'identityClass' => 'app\models\User', 'enableAutoLogin' => true, ], 'errorHandler' => [ 'errorAction' => 'site/error', ], 'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', // send all mails to a file by default. You have to set // 'useFileTransport' to false and configure a transport // for the mailer to send real emails. 'useFileTransport' => true, ], 'log' => [ 'traceLevel' => YII_DEBUG ? 3 : 0, 'targets' => [ [ 'class' => 'yii\log\FileTarget', 'levels' => ['error', 'warning'], ], ], ], 'db' => require(__DIR__ . '/db.php'), 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules' => [ ], ], ], 'params' => $params, ]; if (YII_ENV_DEV) { // configuration adjustments for 'dev' environment $config['bootstrap'][] = 'debug'; $config['modules']['debug'] = [ 'class' => 'yii\debug\Module', // uncomment the following to add your IP if you are not connecting from localhost. //'allowedIPs' => ['127.0.0.1', '::1'], ]; $config['bootstrap'][] = 'gii'; $config['modules']['gii'] = [ 'class' => 'yii\gii\Module', // uncomment the following to add your IP if you are not connecting from localhost. //'allowedIPs' => ['127.0.0.1', '::1'], ]; } return $config; .htaccess в корне: PHP: Options +FollowSymLinks IndexIgnore */* RewriteEngine On RewriteCond %{REQUEST_URI} !^/(web) RewriteRule ^assets/(.*)$ /web/assets/$1 [L] RewriteRule ^css/(.*)$ web/css/$1 [L] RewriteRule ^js/(.*)$ web/js/$1 [L] RewriteRule ^images/(.*)$ web/images/$1 [L] RewriteRule (.*) /web/$1 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /web/index.php .htaccess в папке web: PHP: RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php
эта проблема осталась? какой сейчас .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
Нет, заработали все ссылки, кроме одной почему-то, она выдает ошибку 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, при запуске проекта такая картина:
браузер этот css откуда пытается загрузить и другие? Можно посмотреть в исходном коде страницы в браузере --- Добавлено --- document_root должен был быть на папку web настроен, а не на C:\Apache24\htdocs Может нужно apache перезагрузить, чтобы новые настройки вошли в силу?
Он оттуда и пытается загрузить, где они находятся, но он их почему-то не видит: <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 , я правильно поняла? Теперь он даже главную страницу не видит Конечно я перезагружаю каждый раз)
В чём это выражается? Может в apache error log об этом что-то написано? Ну вроде путь правильный Это после того как document_root была сделана папка web? Да, правильно Это хорошо Что по этим ссылкам выдаёт браузер? Сходи по ним
Ой, что-то тут всё непросто. Я стараюсь, чтоб ситуация на локалке была аналогичной потом на хостинге. Поэтому, прежде чем начинать проект, прописываю домен в hosts, а также в конфиге апача (у меня XAMPP, в нём нету автоматизации, но мне не трудно прописать). Document Root - на папку web (public_html, www - переименовываю в зависимости от хостига, уже писал). После этого всё просто. В корневой папке проекта htaccess нафиг не сдался, в папке web достаточно элементарного, который уже привёл. И все ссылки - нормальные относительные ссылки, как и должны быть. Типа Код (Text): /css/site.css --- Добавлено --- Большой htaccess, который ты привела - это для хостингов, которые не позволяют записывать ничего выше document root. Но в таком случае document root у них на корне сайта, а не где попало. У тебя какой-то непорядок с прописыванием домена явно. Покажи конфиг апача для этого домена (не весь, именно для домена)
Все сделала, как вы сказали, убрала из корня .htaccess, а в папке web прописала такой (ваш не помог): PHP: Options +FollowSymLinks IndexIgnore */* RewriteEngine on RewriteCond %{REQUEST_URI} !^/(web) RewriteRule (.*) /web/$1 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /web/index.php Все работает, css подключилось, по ссылкам переходит) Огромное спасибо! --- Добавлено --- Спасибо за ответы, проблема решена.
Не, что-то у тебя с настройками домена на локалке не то, выложи конфиг, который я просил (httpd-vhosts.conf обычно). Потому, что я вижу сейчас - это могут быть проблемы при переносе на хостинг --- Добавлено --- И в дальнейшем темы по Yii пиши сюда: https://php.ru/forum/forums/yii.48/
PHP: NameVirtualHost *:80 <VirtualHost *:80> DocumentRoot "C:/Apache24/htdocs/yii2.loc/web" ServerName localhost ErrorLog "C:/Apache24/logs/error.log" CustomLog "C:/Apache24/logs/access.log" common </VirtualHost>
А почему новый домен не завела? И при таком document root странно, что приходится ещё раз прописывать папку web в htaccess. Вот как я делаю: Код (Text): <VirtualHost *:80> ServerAdmin webmaster@dummy-host2.example.com DocumentRoot "E:/xampp-new/htdocs/nerud/web" ServerName nerud.lc ErrorLog "E:/xampp-new/htdocs/nerud/error.log" CustomLog "E:/xampp-new/htdocs/nerud/access.log" common </VirtualHost> И в файлике c:\windows\system32\drivers\etc\hosts у меня есть строчка Код (Text): 127.0.0.1 nerud.lc После этого я пишу в браузере nerud.lc просто, и всё работает, и с тем htaccess, что я приводил
Вот, и на каждый проект - по такому блоку прописываешь, и доменчик. Вроде Open Server это умеет сам, но он для меня слишком громоздкий. Вообще, я сейчас больше работаю с VPS-кой дешёвой, чем с локальным сервером, поэтому не меняю ничего.