.htaccess 如何在php项目中从url中删除public?

t3psigkw  于 2022-11-16  发布在  PHP
关注(0)|答案(1)|浏览(134)

我目前正在努力建立一个小型的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/indexpublic/?。当我删除(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]
wswtfjt7

wswtfjt71#

我想说的是,您希望在内部重写所有传入到/project/public文件夹中的控制器的请求。但这不是您所做的。您实现的规则(RewriteRule ^(.*)$ index.php?$1 [L,QSA])只重写 relative 到所请求的文件夹。其中没有提到“public”。
实际的设置取决于你的http主机设置。它的DOCUMENT_ROOT指向哪里。最有可能的是包含你在问题中发布的文件系统结构的文件夹。如果是这样的话,你应该实现一个规则,将所有传入的请求重写到/project/public文件夹。
类似的东西,虽然你可能需要调整它,以配合您的实际设置:

RewriteEngine on
RewriteRule ^ /public/index.php?%{REQUEST_URI} [L,QSA]

您可以在http服务器的主机配置中实现这样的规则。或者,如果您没有访问该规则的权限,您可以使用 distributed 配置文件(如果您已经为http主机启用了这些配置文件),也就是.“htaccess”样式的文件。该文件应该位于您的http主机DOCUMENT_ROOT设置所指向的文件夹中。也就是包含您发布的文件系统结构的文件夹。
其他设置是可能的,这只是一个选项。关键是:你需要重写对你的控制器的请求。

相关问题