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

时间:2017-12-18 13:38:26

标签: php apache .htaccess slim-3

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

上运行的远程服务器上

1 个答案:

答案 0 :(得分:2)

根据您的文件 .htaccess应该是这样的

subset(RacePerState, State!="United States" && State!="District of Columbiaâ€" && !="Puerto Ricoâ€")

RacePerState <- RacePerState[!(RacePerState$Rank=="NA"),]

添加公共会将其重定向到公用文件夹 并为index.php

index.php

当放入公共文件夹

时,

应该看起来像这样

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

我希望这会有所帮助

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

如果您可以访问Virtual apache conf文件,则可以帮助解决此类安全问题,您只需将documentRoot指向公共文件,然后将您之前的.htaccess文件放在index.php旁边的公用文件夹中。 但这次你的.htaccess使用你之前的配置

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

// Run Slim
$app->run()

如果您没有访问权限,请在cpanel共享主机上说,只需将index.php文件和.htaccess放在public_html中,并将其余的应用程序文件和文件夹放在必要的文件和文件夹旁边在public_html文件夹中,例如css,js和images。

我希望这更有帮助