虚拟主机部署ThinkPHP框架:2个实用方法搞定运行目录设置

技术教程 11评选

经常有站长朋友问我,为啥在虚拟主机上部署ThinkPHP项目总是出问题?其实核心问题就一个——虚拟主机没法像宝塔面板那样直接设置运行目录,而ThinkPHP框架必须把public目录设为运行目录才能正常访问。今天11评选就给大家分享两个亲测有效的解决办法,不管你的虚拟主机能绑定几个域名,都能轻松搞定这个难题。

虚拟主机如何设置运行ThinkPHP

一、先搞清楚:虚拟主机为啥不能直接设置运行目录?

咱们用的虚拟主机,本质上是服务商提供的共享服务器空间,和自己买的云服务器不一样,没有宝塔面板这类管理工具的高级权限,没法直接在后台指定网站的运行目录。但ThinkPHP框架的核心入口文件index.php都放在public目录下,只有让网站的访问请求都指向这个目录,项目才能正常加载,所以咱们得用一些间接的方法来实现这个效果。

二、方法一:子域名绑定目录(适合多域名虚拟主机)

这个方法适合那些购买了支持多域名绑定的虚拟主机的站长,操作逻辑很简单,就是让顶级域名继续指向虚拟主机的根目录,专门用一个子域名来指向ThinkPHP的public目录。

1、适用场景

  • 虚拟主机支持绑定多个域名或子域名;

  • 不想改动主域名的访问规则,希望用子域名单独运行ThinkPHP项目。

2、操作步骤

绑定子域名的流程和绑定顶级域名其实完全一样,相信用过虚拟主机的站长都能轻松操作:

  • 登录虚拟主机的管理后台,找到「域名绑定」功能模块;

  • 添加需要用来运行ThinkPHP的子域名,比如tp.你的域名.com;

  • 在域名绑定的设置页面,把这个子域名的访问目录指定为ThinkPHP项目的public目录,比如/public_html/你的项目名/public;

  • 保存设置后,等待域名解析生效,之后访问这个子域名就能正常打开ThinkPHP项目了。

这里要提醒一句,如果你的虚拟主机只能绑定一个域名,那这个方法就用不了,直接看第二种方法就行。

三、方法二:.htaccess重定向(通用方案,强烈推荐)

这是11评选最推荐的方法,不管你的虚拟主机只能绑定1个域名,还是不想折腾子域名,用这个方法都能解决问题。核心就是通过.htaccess文件的伪静态规则,把所有访问请求自动重定向到public目录,相当于模拟了“设置运行目录”的效果。

1、适用场景

  • 虚拟主机仅支持绑定1个域名;

  • 希望直接用主域名运行ThinkPHP项目;

  • 不想额外配置子域名,追求最简单的操作方式。

2、具体操作步骤

整个操作下来也就1分钟,完全没难度:

  • 登录虚拟主机的文件管理后台,找到根目录(不同服务商的根目录名称可能不一样,常见的有public_html、wwwroot、htdocs等);

  • 在根目录下新建一个文件,文件名必须是.htaccess(注意以点开头,没有后缀名);

  • 把下面的伪静态代码复制到这个文件中,保存即可:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ /public/$1 [L]

3、代码简单说明

可能有新手站长看不懂这段代码,11评选简单解释下,方便大家理解:

  • RewriteEngine on:开启URL重写功能,这是伪静态规则生效的前提;

  • RewriteCond %{REQUEST_URI} !^/public/:判断用户的访问请求路径是不是不以/public/开头,如果是就执行下一步;

  • RewriteRule ^(.*)$ /public/$1 [L]:把所有符合上面条件的请求,都重定向到/public/目录下,[L]表示这是最后一条规则,执行完就停止匹配其他规则。

4、验证是否配置成功

保存好.htaccess文件后,直接在浏览器访问你的主域名,如果能正常打开ThinkPHP项目的首页,就说明配置成功了。如果访问不了,可以检查这几点:

  • 你的虚拟主机是否开启了Apache的mod_rewrite模块(绝大多数服务商默认都是开启的);

  • .htaccess文件是不是放在了正确的根目录下,代码有没有复制完整,有没有多余的空格或符号;

  • ThinkPHP项目的public目录下,是不是有index.php这个入口文件。

四、11评选整理的实用小技巧

  • 优先选择方法二:.htaccess重定向不需要额外的域名,操作最简单,适配所有类型的虚拟主机,新手直接用这个准没错;

  • 注意根目录名称:不同虚拟主机服务商的根目录命名可能不同,一定要确认.htaccess文件放在了正确的位置;

  • 备份原有文件:如果你的根目录下已经有.htaccess文件了,一定要先备份再修改,避免覆盖掉原来的配置规则;

  • 适配其他框架:这个方法不只是适用于ThinkPHP,像Laravel、Yii这些需要指定public目录的框架也能通用,只需要把规则里的/public/改成对应框架的目录名称就行。

总结

其实虚拟主机部署ThinkPHP框架的核心,就是让网站的访问请求指向public目录。两个方法各有适用场景:有多域名权限的用子域名绑定目录,只有单域名的用.htaccess重定向。其中.htaccess方法是通用解决方案,操作简单还不用额外成本,是大多数站长的最优选择。

按照上面的方法配置完成后,你的虚拟主机就能像用宝塔面板一样,正常运行ThinkPHP项目了,再也不用为运行目录的问题头疼。

标签:虚拟主机
相关推荐