译自http://fellowtuts.com/yii/hide-or-remove-basicweb-from-url-in-yii-2-0/
yii是一个非常好的框架,它会自动的做许多事情。我们知道,默认的yii安装会使网站通过类似这样的URL“http://www.example.com/basic/web/index.php”来访问,或者类似这样,但是在生产环境中你也许希望从URL中隐藏或移除basic/web,使得系统能以更适应SEO的友好的URL来访问。
在虚拟专用服务器或是专用主机环境中,按yii2.0官方文档中推荐的Apache配置,把basic/web 设置成服务器的document root是没有问题的,因为我们对虚拟主机配置或是Apache的httpd.conf文件是有设置权限的。但是在共享或者代理主机环境中,我们会受限于配置和目录结构,因此不能改变document root。尽管如此,相信我,我们仍然可以隐藏“basic/web” 或者 “yii2-app-basic/web”或任何前缀,可以通过这样的URL格式http://example.com/controller/action 来访问系统。
首先,我们要设置config/web.php,将“enablePrettyUrl”为TRUE,“showScriptName”为FALSE,来保证yii允许美化的URL。如果你不知道应该如何进行上述设置,请参考这篇文章 。
$config = [
...
'components' => [
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
],
...
然后在yii的web目录下添加.htaccess文件,写入下述重写规则
Options +FollowSymLinks
IndexIgnore */*
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
关于上述配置,我们可以从大量关于yii的文档中读到。让我们继续完成剩余的工作。
移动YII安装目录和文件
我假设你的服务器文件结构(左)和YII安装目录结构(右)类似于下面这样
我的服务器结构中public_html和www是可以被直接访问的,将YII安装目录下除了web文件夹以外的所有文件都移动到上面展示的同级服务器目录下。要注意两边都有mail文件夹,因此我们可以把yii对应mail目录下的layouts文件夹至于服务器mail目录中。
然后,将yii安装文件web目录下的所有文件移动或拷贝到服务器的public_html中。现在移除basic/web和index.php来访问系统吧。
我们总结一下yii2.0中为了隐藏和移除URLbasic/web我们做了哪些工作。我们修改了config中的components配置来隐藏index.php,用“htaccess”把不属于目录或文件的请求定向到index.php。然后把整个yii文件拷贝至public_html的同一层(我们不需要愚蠢的basic / yii2-app-basic文件夹),还要把web中的所有东西拷贝到public_html。通过这一步,所有的脚本不直接暴露在web上,只有index.php会被暴露,以上。
转载于:https://blog.51cto.com/mumufairy/1650604