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

问题描述 投票:0回答:1

我有一个简单的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上运行的远程服务器上

php apache .htaccess slim-3
1个回答
2
投票

基于你的文件.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()

我希望这有帮助

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

如果您可以访问Virtual apache conf文件,则可以帮助解决此类安全问题,您只需将documentRoot指向公共文件,并将您之前的.htaccess文件放在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和图像。

我希望这更有帮助

© www.soinside.com 2019 - 2024. All rights reserved.