PHP 框架并与 ftp 共享主机,仅在 public_html

PHP framework and shared hosting with ftp inside only the public_html

最近我正在尝试学习 php 框架,因为我想在我的项目中实现它们,实现路由和安全 sessions/form 处理,我厌倦了使用 wordpress 来处理客户的作品,所以我发现了 Slim,并制作了您可以在项目主页上找到的示例应用程序。

现在,由于各种原因,我知道很多客户最终会选择共享主机解决方案,当它只是一个展示网站时,所以我对共享主机配置和 .htaccess 文件进行了一些研究。我使用 altervista 进行了测试,看看它是否有效(这是一个免费的托管服务,共享),唯一的问题是我遵循的每个教程都假设通过 ftp 连接时你可以看到文档根目录(public_html, htdocs 等)但仍然上传出来,相反,在这种情况下我只能看到 public 文件夹的内部。

这让我有点困惑,但我还是试过了,我上传了所有slim文件(包括public app文件夹和所有必要的后台文件),制作了一个.htaccess,并上传了它,就是这样内容:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^minimaleffort.altervista.org$ [NC,OR]
RewriteCond %{HTTP_HOST} ^www.minimaleffort.altervista.org$
RewriteCond %{REQUEST_URI} !public/
RewriteRule (.*) /public/ [L]

我访问了我的网站索引,slim 框架的主屏幕按预期显示(由于我实施了一些编辑 bootstrap css)

一切正常,对吧?不,错了,如果我输入一个路由(例如默认的应用程序路由)

/{name}

它 returns 一个 404 错误页面,虽然它应该在屏幕上打印我在 URL 中输入的任何名称,但我是否遗漏了什么? 如果您想直接查看网站 here's the url

如果您检查 official Slim 3 example application,它的 .htaccess 文件内容如下:

RewriteRule ^ index.php [QSA,L]

我绝不是 mod_rewrite 大师,但我认为您没有将查询字符串传递到索引文件。这就是首页有效但其他页面无效的原因。

我认为您的 .htaccess 文件应该如下所示:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^minimaleffort.altervista.org$ [NC,OR]
RewriteCond %{HTTP_HOST} ^www.minimaleffort.altervista.org$
RewriteCond %{REQUEST_URI} !public/
RewriteRule ^(.*)$ /public/index.php [QSA,L]