web-dev-qa-db-ja.com

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

Yii2でクリーンURLを有効にするにはどうすればよいですか。 index.phpと「?」を削除したいURLパラメータから。そのためにYii2で編集する必要があるセクションはどれですか?

62
user7282

Yii2で動作するようになりました。 Apacheに対してmod_rewriteを有効にします。 basic templateの場合、次の手順を実行します。Webフォルダーに.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

次に、configフォルダー内の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>',
    ),
],

advanced templateの場合、.htaccessおよびbackend/webフォルダー内にfrontend/webファイルを作成し、common/config/main.php内にurlManagerコンポーネントを追加します

152
user7282

私にとって、問題は:

  1. 上記のように、webフォルダーに.htaccessがありません。
  2. AllowOverrideディレクティブがNoneに設定され、URLの書き換えが無効になりました。 Allに変更したところ、きれいなURLがうまく機能するようになりました。
<Directory "/path/to/the/web/directory/">
  Options Indexes 
  FollowSymLinks MultiViews 
  AllowOverride All 
  Require all granted
</Directory>
13
pkout

最初の重要な点は

サーバーでModule_Rewriteが有効になっています(LAMP、WAMP、XAMP..etc)yii2フレームワークでURLを再配線する場合.htaccessファイルを1つ作成し、/ webフォルダーに配置します

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

第二段階

構成フォルダーcommon/config/main-local.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>',
   ),
],
13

最初に、Yii2プロジェクトのルートフォルダーに.htaccessを次の内容で作成します。

Options +Indexes

<IfModule mod_rewrite.c> 
  RewriteEngine on

  RewriteCond %{REQUEST_URI} !^public
  RewriteRule ^(.*)$ frontend/web/$1 [L] 
</IfModule>

# Deny accessing below extensions
<Files ~ "(.json|.lock|.git)">
Order allow,deny
Deny from all
</Files>

# Deny accessing dot files
RewriteRule (^\.|/\.) - [F]

次のコンテンツを含む別の.htaccessファイルをWebフォルダーに作成します。

frontend/web/追加backend/web/両方のWebフォルダーに.htaccessファイルを追加することを忘れないでください:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule . index.php

これで完了です。 Yii2でURL構成を変更します。

<?php

use \yii\web\Request;
$baseUrl = str_replace('/frontend/web', '', (new Request)->getBaseUrl());


$config = [
    'components' => [
        'request' => [
            // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
            'cookieValidationKey' => 'aiJXeUjj8XjKYIG1gurMMnccRWHvURMq',
            'baseUrl' => $baseUrl,
        ],
         "urlManager" => [
            'baseUrl' => $baseUrl,
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            "rules" => [
                "home" => "site/index",
                "about-us" => "site/about",
                "contact-us" => "site/contact",
            ]
        ]
    ],
];

return $config;

URLは次のように変更されます。

localhost/yii2project/site/about => localhost/yii2project/about-uslocalhost/yii2project/site/contact => localhost/yii2project/contact-uslocalhost/yii2project/site/index => localhost/yii2project/home

あなたの管理者にアクセスすることができます

localhost/yii2project/backend/web

11
Ilyas karim

この議論に追加するために-私はYii2をインストールしたばかりで、次のコメントアウトされたコードがconfig/web.phpに含まれています:

'urlManager' => [
  'enablePrettyUrl' => true,
  'showScriptName' => false,
  'rules' => [],
],

受け入れられた回答に.htaccessファイルを追加し、上記のコメントを外すと、きれいなURLが機能します(受け入れられた回答の「ルール」が何であるかはわかりませんが、それらがなくてもすべて機能するようです)。

2
Vanessa Deagan

nginxではそのように設定します

location / {
    try_files $uri $uri/ /index.php$is_args$args;
}
2
rakhmatov

ステップ1:ルートに.htaccessファイルを配置します。

Options –Indexes

<IfModule mod_rewrite.c> 
  RewriteEngine on

  RewriteCond %{REQUEST_URI} !^public
  RewriteRule ^(.*)$ frontend/web/$1 [L] 
</IfModule>

# Deny accessing below extensions
<Files ~ "(.json|.lock|.git)">
Order allow,deny
Deny from all
</Files>

# Deny accessing dot files
RewriteRule (^\.|/\.) - [F]

ステップ2:.htaccessファイルをfrontend/webに配置します。

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

ステップ3:次にfrontend/config/main.phpを変更します。 'components' => []内に次のコードを追加する必要があります。

'request' => [
 'csrfParam' => '_csrf-frontend',
 'baseUrl' => '/yii-advanced', //http://localhost/yii-advanced
],

'urlManager' => [
  'class' => 'yii\web\UrlManager',
  'showScriptName' => false, // Disable index.php
  'enablePrettyUrl' => true, // Disable r= routes
  'rules' => array(
          'about' => 'site/about',
          'service' => 'site/service',
          'contact' => 'site/contact',
          'signup' => 'site/signup',
          'login' => 'site/login',
  ),
],

上記の手順は私のために働いています。

1

ステップ1:プロジェクトconfig/main.phpにある例:frontend/config/main.php

'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [],
        ]

ステップ2:.htaccessファイルのインセットWebフォルダを作成します(例:frontend/web)

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

#php_flag  display_errors        on
#php_value error_reporting       2039
0
nishanthravi

私のために働いたもの-
Yii2プロジェクトのルートフォルダに.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ファイルWebフォルダーを作成しました。

frontend/web/

以下を追加しました-

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

次に、ここにurlmanagerを追加しました-

projectFolder/common/config/main.php

私にとってはそこになかったので、このように追加しました-

'urlManager' => [
    'class' => 'yii\web\UrlManager',
    'enablePrettyUrl' => true,
    'showScriptName' => false,
   /* 'rules' => [
        '<controller:\w+>/<id:\d+>' => '<controller>/view',
        '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
        '<controller:\w+>/<action:\w+>' => '<controller>/<action>',

    ],*/
],

このコードが'components' => []にあることを確認してください。

サーバーを再起動すると、すべてが正常に機能します。

0
S.Yadav

ステップバイステップの説明

ステップ1

プロジェクトのルートで、次の内容の.htaccessを追加します。

Options +FollowSymLinks
IndexIgnore */*
RewriteEngine On
     RewriteCond %{REQUEST_URI} !^/(web)
    RewriteRule ^assets/(.*)$ /web/assets/$1 [L]
    RewriteRule ^css/(.*)$ web/css/$1 [L]
    RewriteRule ^js/(.*)$ web/js/$1 [L]
    RewriteRule ^images/(.*)$ web/images/$1 [L]
    RewriteRule (.*) /web/$1
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /web/index.php

ステップ2

/ webフォルダーに、次の内容の.htaccessファイルを追加します。

RewriteEngine On RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . index.php

ステップ

配列の要素コンポーネントの/config/web.phpファイルに、次のコードを追加します。

'request' => [
    // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
    'cookieValidationKey' => 'yYy4YYYX8lYyYyQOl8vOcO6ROo7i8twO',
    'baseUrl' => ''
],

//...

'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [
        '' => 'site/index',                                
        '<controller:\w+>/<action:\w+>/' => '<controller>/<action>',
    ],
],

完了しました。

0
CollinsKe