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

PHP Slim 3 .htaccess and index.php not working in subdirectory

我有一个简单的 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();

注意:项目在 Apache

上的远程服务器 运行 中

基于你的文件 .htaccess 应该是这样的

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

添加 public 会将其重定向到 public 文件夹 对于 index.php

index.php

放入public文件夹后应该是这样的

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

// Run Slim
$app->run()

希望对您有所帮助

还请注意这个简单的帮助,@Eric 在我的评论中建议可能存在安全问题,因此可以做额外的工作,这只是为了解决您当前的问题,以减少它可能带来的任何麻烦给你

如果您有权访问您的虚拟 apache conf 文件,您可以帮助解决此类安全问题,您只需将您的 documentRoot 指向您的 public 文件并将您之前的 .htaccess 文件放在 public index.php 旁边的文件夹 但是这次你的 .htaccess 使用了你之前的配置

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

当您没有访问权限时,假设在与 cpanel 的共享主机上,只需将您的 index.php 文件和 .htaccess 放入您的 public_html,然后将其余的应用程序文件和文件夹放入除了需要放在 public_html 文件夹中的必要内容,例如 css、js 和图像。

我希望这对您有所帮助