Yii2:-красивые URL-адреса сформированы, но не работают (говорит 404 NOT FOUND)

Я начал изучать 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://localhost/yii2/web/

он открыт, и когда я наводил курсор на любую ссылку на странице, он показывал мне что-то вроде этого: http://localhost/yii2/web/site/about (что показывает красивую горничную URL)

Но эти URL-адреса не работают (найдено 404)

Я также попробовал использовать код сообщений ниже, но у меня это не сработало:

Как получить доступ к контроллеру с красивым URL-адресом в Yii2

Включить чистый URL-адрес в Yii2


person Anant Kumar Singh    schedule 20.12.2016    source источник
comment
Попробуйте также после предыдущего шага очистить кеш браузера или использовать другой браузер.   -  person SaidbakR    schedule 20.12.2016
comment
спасибо за ваш ответ, это действительно помогло мне ‹br›однако я использовал только один .htaccess внутри моего веб-корня приложения yii и добавил <Directory "/var/www/html"> AllowOverride All </Directory> ‹br› в конфигурацию моего веб-сайта по умолчанию в apache, то есть: файл /etc/apache2/sites-available /000-default.conf ‹br› ps: если вы используете расширенный шаблон, вы должны добавить файл .htaccess в веб-каталог внешнего интерфейса, и серверная часть ‹br› надеется, что это будет полезно   -  person leila    schedule 23.07.2017
comment
Вот еще один вариант: stackoverflow.com/a/42906056/5247564   -  person Ilyas karim    schedule 29.03.2018


Ответы (3)


Наконец-то у меня все заработало:-

1. создал два файла .htaccess (один в корне и один в веб-папке моего приложения):-

корневой .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. Теперь запустите следующие команды:-

a. sudo /etc/init.d/apache2 stop (чтобы остановить apache)

b. sudo killall apache2 (чтобы завершить процесс)

c. sudo netstat -l|grep www (для проверки того, что порт 80 не используется)

d. 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

person Anant Kumar Singh    schedule 20.12.2016

Почему бы вам просто не указать правила в вашем файле 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-адрес выглядел.

EDIT: Если он все еще не работает, попробуйте вместо этого установить виртуальный хост с помощью:

<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>
person Francis Ngueukam    schedule 20.12.2016
comment
У меня есть решение, но спасибо за вашу бесценную помощь. +1. - person Anant Kumar Singh; 20.12.2016

Если ни один из приведенных выше ответов не сработал, и вы используете Apache в качестве веб-сервера в Linux, убедитесь, что в Apache включен режим перезаписи, а если нет, вы можете включить его с помощью этой команды:

sudo a2enmod rewrite 

и после этого перезапустите веб-сервер Apache

sudo systemctl restart apache2

и это должно решить проблему.

person Babak Kamali    schedule 21.11.2020