漂亮的网址在yii2中不起作用

Ana*_*Die 6 php apache .htaccess pretty-urls yii2

我已经开始学习yii2了,我试着做漂亮的URL东西,但失败了.我做了什么:-

在config/web.php中(我在下面编辑过):

'urlManager' => [
        'class' => 'yii\web\UrlManager',
        // Hide index.php
        'showScriptName' => false,
        // Use pretty URLs
        'enablePrettyUrl' => true,
        'rules' => [
        ],
Run Code Online (Sandbox Code Playgroud)

然后我创建了一个.htaccess文件并将其放在root上(它有以下代码):

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
Run Code Online (Sandbox Code Playgroud)

我也打开了apache2.conf文件,并改变如下:

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All <! -- instead of none -->
    Require all granted
</Directory>
Run Code Online (Sandbox Code Playgroud)

我还通过命令检查了更改:

 grep -R AllowOverride /etc/apache2
Run Code Online (Sandbox Code Playgroud)

它显示如下:

/etc/apache2/apache2.conf:  AllowOverride All  <!-- It is showing that done -->
Run Code Online (Sandbox Code Playgroud)

现在:

当我访问我的页面时:

HTTP://本地主机/ yii2 /网络/

它是打开的,当我在"关于"链接时,它显示我:http:// localhost/yii2/web/site/about (显示漂亮的网址女佣)

但这个网址不起作用(404说)

我在下面的帖子中尝试了每个代码:

如何在Yii2中使用漂亮的URL访问控制器

在Yii2中启用干净的URL

Ana*_*Die 14

最后我让它工作: -

1.创建两个.htaccess文件(一个在root上,一个在我的应用程序的web文件夹中): -

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> 
Run Code Online (Sandbox Code Playgroud)

web文件夹.htaccess: -

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
Run Code Online (Sandbox Code Playgroud)

2.在config/web.php中: -

'urlManager' => [
        'enablePrettyUrl' => true,
        'showScriptName' => false,
        'rules' => [
        // Your rules here
        ],
    ],
Run Code Online (Sandbox Code Playgroud)

3.改成(apache2.conf)如下: -

<Directory /var/www/html/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>
Run Code Online (Sandbox Code Playgroud)

4.然后运行以下命令: -

一个. (停止apache)sudo /etc/init.d/apache2 stop

(杀死进程并检查没有进程正在运行)sudo killall apache2

C. (检查端口80现在没有使用)sudo netstat -l|grep www

d. (重启apache)sudo /etc/init.d/apache2 restart

现在一切正常.

顺便说一下,感谢每一个试图帮助我的人.

参考: -

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


Not*_*ion 6

为什么不在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>',
        ),
    ],
Run Code Online (Sandbox Code Playgroud)

我在这里设置的规则只是一个例子,您可以按照您希望网址的样子设置它.

编辑: 如果它仍然无法正常工作,请尝试设置虚拟主机,而不是:

<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>
Run Code Online (Sandbox Code Playgroud)