下载了Yii2 Advanced之后,启动一看,发现其默认是不启用UrlManager的。Url还是Get式的,想启用UrlManager,其设置方法如下。在\frontend\config\main.php文件和\backend\config\main.php文件的components里添加UrlMananger的信息就行。具体代码如下(我省去了不相关的内容)。
<?php
// ...
return [
// ...
'components' => [
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
],
// ...
],
// ...
];
启用之后,可以使用UrlReWrite功能了。但地址还是以frontend/web/site/about这种形式显示的,我觉得前台最好是什么都不加,后台加admin就行。我希望的Url形式是这样的。
前台:site/about
后台:admin/site/about
在网上找了一堆资料,发现是完全可以实现的。方法大体是修改设置文件添加homeUrl和baseUrl属性,然后再修改.htaccess文件。设置方法如下:
1. 修改\frontend\config\main.php文件。
在Rutrun里添加homeUrl,在components里添加baseUrl。添加后main.php文件如下(我省去了不相关的内容)
<?php
// ...
return [
// ...
'homeUrl' => '/',
'components' => [
'request' => [
'baseUrl' => '',
],
// ...
],
// ...
];
2. 修改\backend\config\main.php文件。
在Rutrun里添加homeUrl,在components里添加baseUrl。添加后main.php文件如下(我省去了不相关的内容)
<?php
// ...
return [
// ...
'homeUrl' => '/admin',
'components' => [
'request' => [
'baseUrl' => '/admin',
],
// ...
],
// ...
];
3. 在Yii2的根目录下添加一个.htaccess文件,其内容如下:
# prevent directory listings
Options -Indexes
# follow symbolic links
Options FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/admin/$
RewriteRule ^(admin)/$ /$1 [R=301,L]
RewriteCond %{REQUEST_URI} ^/admin
RewriteRule ^admin(/.+)?$ /backend/web/$1 [L,PT]
RewriteCond %{REQUEST_URI} ^.*$
RewriteRule ^(.*)$ /frontend/web/$1
4. 在\frontend\web下添加一个.htaccess文件,其内容如下:
Options +FollowSymLinks
IndexIgnore /
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
5. 在\backend\web下添加一个.htaccess文件,其内容如下:
# use mod_rewrite for pretty URL support
RewriteEngine on
# if a directory or a file exists, use the request directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward the request to index.php
RewriteRule . index.php
到这里为止,你就可以用admin来访问后台,用不带admin的目录来访问前台了。
怎么设置的 我的一直失败
我的设置成功了,apache环境。
834659546@qq.com 求解答
你的Apache设置了UrlReWrite了吗?
如果设置了,应该没有问题的
就加了上面 文章中的这个五个地方
Apache 需要启用 urlrewrite
都不行的
你用的是Apache的Web服务器吗?是不是安装了mod_rewrite了?如果没有安装的话,是不支持.htaccess里的Rewrite的。
支持,只是隐藏了