商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > ThinkPHP伪静态规则怎么在Cloudways用_ThinkPHP云托管伪静态介绍【教程】

ThinkPHP伪静态规则怎么在Cloudways用_ThinkPHP云托管伪静态介绍【教程】

  发布于2026-07-07 阅读(0)

扫一扫,手机访问

Cloudways 托管环境默认不启用 Apache 的 .htaccess 解析。这意味着,你把写好的 .htaccess 文件往项目里一丢,指望它自动生效?大概率会落空。很多人 ThinkPHP 伪静态在 Cloudways 上配置失败,根源就在这里。

Cloudways 上 Apache 不读 .htaccess 怎么办

Cloudways 用的是 Apache + PHP-FPM 架构,但出于安全和性能的考量,AllowOverride 默认被设为了 None。说白了,就是系统直接忽略了项目目录下的 .htaccess 文件。你写的规则再标准,也等于白写。

要解决这个问题,需要你手动操作一下:

  • 登录 Cloudways 后台,进入服务器 → “Application Settings” → 找到 “Apache Configuration”(注意不是 Nginx)→ 将模式切换为 “Custom”。
  • 在弹出的编辑框里,**不要**只贴一段 RewriteRule,而是要把完整的 块覆盖进去。举个例子:
    Options Indexes FollowSymLinks    AllowOverride All    Require all granted

这里有个关键点:/applications/your-app-name/public 这个路径必须替换成你项目 public 目录的绝对路径(具体路径可以在 Cloudways 的 “Server Access” 页面查到)。

  • 保存配置后,记得点 “Restart Apache”,不是 reload。只有 restart 才能让新配置真正生效。

ThinkPHP 6 的 rewrite 规则要适配 Cloudways 路径结构

Cloudways 的 Web 根目录默认指向 public 子目录。但很多网上教程里给的规则,都是假设根目录就是入口。如果你直接套用,很可能导致 index.php 找错位置,或者出现循环重定向的问题。

正确的做法是:

  • 确保你的 .htaccess 文件是放在 public 目录下,而不是项目根目录。
  • 规则中的 RewriteBase 必须显式声明,否则 $1 的匹配会出错:
RewriteEngine OnRewriteBase /RewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
  • 这里的 RewriteBase / 表示当前 public 目录就是 Web 根目录,所有重写都基于这个路径。如果漏掉这行,访问 /user/login 时,系统可能错误地把它拼成 /public/index.php/user/login
  • 如果你的项目是部署在子目录下(比如 https://site.com/myapp/),那么 RewriteBase 需要改成 /myapp/。同时,ThinkPHP 配置里的 app_hosturl_domain_root 也要同步调整。

Nginx 模式下 Cloudways 的伪静态更简单但容易漏掉 try_files

如果你在 Cloudways 后台把应用类型从 “Apache” 切换到了 “Nginx”,那 .htaccess 就完全失效了,必须改用 Nginx 的原生规则。需要注意的是,Cloudways 的 Nginx 配置模板里默认没有 try_files 这一项。如果你直接照搬网上“if (!-e)”的写法,很容易触发 404 或者无限跳转。

正确的配置方法是:

  • 进入 “Application Settings” → “Nginx Configuration” → 切换为 “Custom”。
  • location / 块内,**必须用 try_files 来替代 if**:
location / {    try_files $uri $uri/ /index.php?s=$uri&$args;}
  • Cloudways 的 Nginx 默认已经开启了 fastcgi_split_path_info,所以不需要额外配置 PATH_INFO 解析。
  • 如果你使用了 TP6 的多应用模式(比如 route/app/index),要确保 s= 后面的参数格式与 pathinfo_depr 保持一致(默认是 /,不是 -.)。

说到底,真正卡住人的不是规则本身,而是 Cloudways 把 Apache/Nginx 的底层控制藏在了二级菜单里,并且默认关闭了最关键的 AllowOverridetry_files。改完配置不 restart、.htaccess 放错目录、RewriteBase 漏写——这三个点,几乎占了 90% 的调试时间。

本文转载于:https://www.php.cn/faq/2431852.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注