Я начал изучать yii2 и пытался делать красивые вещи с URL, но безуспешно. Что я сделал:-
в config / web.php (я редактировал ниже):
'urlManager' => [
'class' => 'yii\web\UrlManager',
// Hide index.php
'showScriptName' => false,
// Use pretty URLs
'enablePrettyUrl' => true,
'rules' => [
],
тогда я создал .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
Также я открыл файл apache2.conf и изменил его так:
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All <! -- instead of none -->
Require all granted
</Directory>
Также я проверил изменения через команду:
grep -R AllowOverride /etc/apache2
И это показывает, как показано ниже:
/etc/apache2/apache2.conf: AllowOverride All <!-- It is showing that done -->
Сейчас:
когда я получаю доступ к своей странице через:
HTTP: // локальный / yii2 / веб /
он открывается, и когда я нахожу на ссылку О ссылке, он показывает мне: HTTP: // локальный / yii2 / веб-сайта / / о (который показывает, что красивая горничная URL)
Но этот URL не работает (говорит 404 найдено)
Я попробовал ниже сообщения каждого кода:
Наконец-то я заработал: —
1. создал два файла .htaccess (один в корне и один в веб-папке моего приложения): —
root .htaccess: —
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
</IfModule>
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_URI} ^/.*
RewriteRule ^(.*)$ web/$1 [L]
RewriteCond %{REQUEST_URI} !^/web/
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ web/index.php
</IfModule>
веб-папка .htaccess: —
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
2. В config / web.php: —
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
// Your rules here
],
],
3. Изменено в (apache2.conf), как показано ниже: —
<Directory /var/www/html/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
4. Затем запустите следующие команды: —
а. sudo /etc/init.d/apache2 stop
(чтобы остановить Apache)
б. sudo killall apache2
(убить процесс и проверить, что процесс не запущен)
с. sudo netstat -l|grep www
(чтобы проверить порт 80 не используется сейчас)
д. sudo /etc/init.d/apache2 restart
(перезапустить Apache)
И теперь все работало нормально.
Кстати, спасибо всем, кто пытался мне помочь.
Ссылка взята: —
https://www.my-yii.com/forum/topic/how-to-set-up-pretty-urls-in-yii2-basic-template
https://askubuntu.com/questions/48362/how-to-enable-mod-rewrite-in-apache
Почему вы просто не даете правила в своем файле web.php? как ниже:
'urlManager' => [
'class' => 'yii\web\UrlManager',
// Disable index.php
'showScriptName' => false,
// Disable r= routes
'enablePrettyUrl' => true,
'rules' => array(
'<controller:\w+>/<id:\d+>' => '<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
),
],
Правила, которые я здесь установил, являются лишь примером, вы можете установить его так, как вы хотите, чтобы ваш URL выглядел.
РЕДАКТИРОВАТЬ:
Если он все еще не работает, попробуйте установить виртуальный хост вместо:
<Directory "/var/www/html/yii2/web/">
DirectoryIndex index.php
AllowOverride All
Order allow,deny
Allow from all
Allow from 127.0.0.1 localhost
</Directory>