我目前正在努力建立一个小型的php mvc框架。在一个框架中我有一个this文件夹结构。
-app
--controllers
-Post.php
-core
-logs
-public
--.htaccess
-- index.php
-vendor
在这里index.php作为前端控制器工作
如下所示..
<?php
/**
* Posts controller
*
*/
class Posts
{
public function index()
{
echo 'Hello index';
}
public function addNew()
{
echo 'Hello addNew';
}
}
在url中,我想删除project/public/?posts/index
public/?。当我删除(public/?)并访问url时,它显示了此错误消息。
project/posts/index
服务器上没有找到请求的URL。
使用public/?project/public/?posts/index
可以正常工作。并且它的回显索引消息
项目/公共/
公用文件夹中的.htaccess
包含:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
在项目主根文件夹中...我没有添加.htaccess和index.php文件。
在.htaccess中,当我添加这一行时。url重定向到xammp欢迎屏幕
RewriteRule ^(.*)$ index.php?$1 [L,QSA]
1条答案
按热度按时间wswtfjt71#
我想说的是,您希望在内部重写所有传入到
/project/public
文件夹中的控制器的请求。但这不是您所做的。您实现的规则(RewriteRule ^(.*)$ index.php?$1 [L,QSA]
)只重写 relative 到所请求的文件夹。其中没有提到“public”。实际的设置取决于你的http主机设置。它的
DOCUMENT_ROOT
指向哪里。最有可能的是包含你在问题中发布的文件系统结构的文件夹。如果是这样的话,你应该实现一个规则,将所有传入的请求重写到/project/public
文件夹。类似的东西,虽然你可能需要调整它,以配合您的实际设置:
您可以在http服务器的主机配置中实现这样的规则。或者,如果您没有访问该规则的权限,您可以使用 distributed 配置文件(如果您已经为http主机启用了这些配置文件),也就是.“htaccess”样式的文件。该文件应该位于您的http主机
DOCUMENT_ROOT
设置所指向的文件夹中。也就是包含您发布的文件系统结构的文件夹。其他设置是可能的,这只是一个选项。关键是:你需要重写对你的控制器的请求。