PHP Slim 3.htaccess和index.PHP在子目录中不工作

PHP Slim 3.htaccess和index.PHP在子目录中不工作,php,apache,.htaccess,slim-3,Php,Apache,.htaccess,Slim 3,我有一个简单的PHP Slim 3项目。当.htaccess和index.php位于根目录中时,一切都正常工作,但我想将它们保留在“public”子目录中。当我有他们在那里,我得到错误404。这不是一件强制性的事情,但我想保持一切在结构中,并知道是什么导致了错误或如何修复它,以供将来参考 项目结构 root app controllers bootstrap logs public css js resources vendor .htaccess RewriteEng

我有一个简单的PHP Slim 3项目。当.htaccess和index.php位于根目录中时,一切都正常工作,但我想将它们保留在“public”子目录中。当我有他们在那里,我得到错误404。这不是一件强制性的事情,但我想保持一切在结构中,并知道是什么导致了错误或如何修复它,以供将来参考

项目结构

root
 app
  controllers
 bootstrap
 logs
 public
  css
  js
 resources
 vendor
.htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]
index.php

<?php
// Require application bootstrap
require __DIR__ . '/../bootstrap/app.php';

// Run Slim
$app->run();
基于您的文件的

.htaccess应该是这样的

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ public/index.php [QSA,L]
添加公用文件夹会将其重定向到公用文件夹 对于index.php

index.php

当放入公用文件夹时,应该是这样的

<?php
// Require application bootstrap
require dirname(__DIR__). '/bootstrap/app.php';

// Run Slim
$app->run()
当您没有访问权限时,比如说在与cpanel共享的主机上,只需将index.php文件和.htaccess放在public_html中,并将其余的应用程序文件和文件夹放在public_html文件夹中必要的文件和文件夹旁边,如css、js和图像

基于您的文件,我希望这会更有帮助 .htaccess应该是这样的

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ public/index.php [QSA,L]
添加公用文件夹会将其重定向到公用文件夹 对于index.php

index.php

当放入公用文件夹时,应该是这样的

<?php
// Require application bootstrap
require dirname(__DIR__). '/bootstrap/app.php';

// Run Slim
$app->run()
当您没有访问权限时,比如说在与cpanel共享的主机上,只需将index.php文件和.htaccess放在public_html中,并将其余的应用程序文件和文件夹放在public_html文件夹中必要的文件和文件夹旁边,如css、js和图像



我希望这会更有帮助

您的Apache
VirtualHost
也应该指向
public
而不是
root
。我会尝试您的解决方案,但我担心我不能,因为我租用的远程服务器不允许我编辑Apache配置。维护计划通常提供类似的配置目录结构。他们有一个专用的
private
public
文件夹。您是否尝试过此前端控制器?您的Apache
VirtualHost
也应该指向
public
而不是
root
。我会尝试您的解决方案,但我恐怕无法访问,因为我租用的远程服务器不允许我编辑Apache配置。测试计划通常提供类似的目录结构。他们有一个专用的
private
public
文件夹。您是否尝试过此前端控制器?您的回答存在安全问题。仍然可以访问
public
之外的文件
public
文件夹的存在是有原因的。同意,我只是想给此人一个解决当前情况的方法,我不打算让此人的事情复杂化,我也不想假设此人拥有广博的知识。但我会让那个人知道安全措施tendencies@Ezekiel-最好在答案中解决任何安全问题。如果不是,OP可能会认为这完全没问题,并继续构建不安全的应用程序。让我们互相帮助,打造更好、更安全的应用程序。:-)@MagnusEriksson非常感谢,我已经注意到了这一点,将立即让此人知道,以及可能的地址such@Eric我有点不知所措,因为我看不出这个答案中的安全问题在哪里。仍然可以访问
public
之外的文件
public
文件夹的存在是有原因的。同意,我只是想给此人一个解决当前情况的方法,我不打算让此人的事情复杂化,我也不想假设此人拥有广博的知识。但我会让那个人知道安全措施tendencies@Ezekiel-最好在答案中解决任何安全问题。如果不是,OP可能会认为这完全没问题,并继续构建不安全的应用程序。让我们互相帮助,打造更好、更安全的应用程序。:-)@MagnusEriksson非常感谢,我已经注意到了这一点,将立即让此人知道,以及可能的地址such@Eric我有点不知所措,因为我看不出这个答案中的安全问题在哪里:/