Yii2:-Pretty URL 已经形成,但没有工作(说 404 NOT FOUND)

Yii2:-Pretty URL's are formed, but not working (says 404 NOT FOUND)

我已经开始学习 yii2 并且我尝试做漂亮的 URL 东西,但是失败了。我做了什么:-

in 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/

它打开了,当我将鼠标悬停在页面的任何 link 上时,它向我显示了这样的内容:http://localhost/yii2/web/site/about(显示漂亮的 URL 的女仆)

但是这些 URL 不起作用(说找到 404 个)

我也试过下面的帖子代码,但对我没有用:

How to access a controller with pretty url in Yii2

Enable clean URL in Yii2

为什么不直接在 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>

终于成功了:-

1. 创建了两个 .htaccess 文件(一个在根目录下,一个在我的应用程序的 Web 文件夹中) :-

root .htaccess:-

<IfModule mod_rewrite.c>
    Options +FollowSymlinks
    RewriteEngine On
</IfModule>

<IfModule mod_rewrite.c>
    RewriteCond %{REQUEST_URI} ^/.*
    RewriteRule ^(.*)$ web/ [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

如果以上答案均无效,并且您在 linux 上使用 Apache 作为 Web 服务器,请确保在 Apache 中启用了重写模式,如果未启用,您可以使用以下命令启用它:

sudo a2enmod rewrite 

然后重启 Apache 网络服务器

sudo systemctl restart apache2

应该可以解决问题。