web-dev-qa-db-ja.com

Yii2:-かなりのURLが形成されていますが、機能していません(404「NOTFOUND」と言います)

私は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が見つかったと言います)

以下の投稿コードも試しましたが、うまくいきませんでした:

Yii2でかなりのURLでコントローラーにアクセスする方法

Yii2でクリーンURLを有効にする

ついに動作させました:-

1。 2つの.htaccessファイルを作成しました(1つはルートに、もう1つはアプリケーションの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> 

webフォルダー.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

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>
6