在本地主机上的 Apache 中将根文件夹设置为子文件夹,这也将在生产服务器上工作

Posted

技术标签:

【中文标题】在本地主机上的 Apache 中将根文件夹设置为子文件夹,这也将在生产服务器上工作【英文标题】:Set Root Folder To SubFolder In Apache On LocalHost That Will Also Work On Production Server 【发布时间】:2021-07-30 06:18:46 【问题描述】:

我有一个项目,它有一个“公共”和“私人”文件夹结构,它们位于主项目根文件夹内的同一级别(见附图)。

我希望本地服务器(在本例中为 MAMP)自动默认为“公共”文件夹作为域根目录。最好是在 php 中还是在 Apache 中执行此操作?

另外,当我将网站上传到生产服务器时,域名将设置在“公共”文件夹中,所以我希望有一个解决方案,这意味着当我上传网站时,这仍然是案例 - 即 www.example.com 将是“项目/公共”文件夹。

这对我来说是全新的,所以对于解决这个问题的最佳方法有点茫然。

【问题讨论】:

您通常会告诉服务器(Apache、nginx、IIS 等)站点的“根”在哪里,那是您所有代码开始的地方。该代码可以使用includerequire 访问其他地方的附加PHP 代码,并且它可以读取其他文件夹的文件系统(假设服务器权限正确)。这通常是为了让您可以将文件与 URL 中的直接访问分开,无论是 PHP 类(如 Composter 中的东西)还是日志文件或自定义上传。我不知道你的 public/private 的具体情况,但是在外面看到 index.php 文件有点奇怪 @ChrisHaas 我在公共和私人文件夹中也有 index.php 文件。出于安全原因,我认为您应该始终在每个文件夹中都有一个 index.php 文件?因为我使用的是 MAMP,所以我想我正在寻找的是将公共文件夹设置为根目录的 Apache 代码,所以当我将站点上传到实时服务器时,它仍然可以像在本地主机上一样工作吗?跨度> “在每个文件夹中放置一个 index.php”对我来说是一种较旧的思维方式,通常与共享或托管托管有关。没有对错,但它可以防止服务器配置错误,对我来说,我只是确保我的服务器配置正确。 (另外,我在 Nginx 上托管,无论如何都可以绝对控制配置您的服务器。) 你能检查一下吗 - ***.com/questions/23635746/… 【参考方案1】:

基本上,您只需要创建一个虚拟主机配置文件并在 Apache 配置文件中启用您的应用程序将侦听请求的端口。我从未使用过 MAMP,所以我给你一个 Linux 机器上的虚拟主机配置示例

    在/etc/httpd/conf.d/中创建一个conf文件

    vim /etc/httpd/conf.d/example.conf

    此文件将告诉 Apache 服务器的文档根目录是什么 一个特定的端口。 PORT 可以是保留以外的任何可用端口 端口 (0-1023)

    保持活跃

    DocumentRoot "/var/www/example/public"
    <Directory "/var/www/example/public/">
        Options -Indexes +FollowSymLinks +MultiViews
        AllowOverride None
        Order allow,deny
        Allow from all
    
        # enable mod_rewrite
        RewriteEngine on
    
        # Handle Authorization Header
        RewriteCond %HTTP:Authorization .
        RewriteRule .* - [E=HTTP_AUTHORIZATION:%HTTP:Authorization]
    
        # Redirect Trailing Slashes If Not A Folder...
        RewriteCond %REQUEST_FILENAME !-d
        RewriteCond %REQUEST_URI (.+)/$
        RewriteRule ^ %1 [L,R=301]
    
        # Handle Front Controller...
        RewriteCond %REQUEST_FILENAME !-d
        RewriteCond %REQUEST_FILENAME !-f
        RewriteRule ^ index.php [L]
    </Directory>
    
    LogLevel Warn       
    
    ErrorLog  /var/log/httpd/example-error.log
    CustomLog /var/log/httpd/example-access.log combined
    

    在 Apache conf 文件中添加此端口号 PORT (/etc/httpd/conf/httpd.conf)

    监听端口

    重启 Apache 服务器

与 XAMP 和 WAMP 一样,MAMP 也应该有一个 GUI 来配置 Apache 服务器。您可以找到保存这些虚拟主机配置的位置/文件夹,并且可以直接通过任何文本编辑器修改该文件

你也可以参考这些

Configuring Virtual Hosts With MAMP

Adding a virtual host in MAMP for Mac

【讨论】:

以上是关于在本地主机上的 Apache 中将根文件夹设置为子文件夹,这也将在生产服务器上工作的主要内容,如果未能解决你的问题,请参考以下文章

如何在本地主机上运行 Apache Wild Card 脚本?

本地主机上的 PHP 文件禁止访问 [关闭]

如何在具有自动布局的容器视图中将 UITableView 的大小设置为子视图

自定义重定向在本地主机上不起作用

如何将文件放在本地主机上

在本地主机上运行 VueJS 应用程序