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

问题描述

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

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

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

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

文件夹结构

标签: phpapacheserverdirectory

解决方案


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

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

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

  2. 该文件将告诉 Apache 服务器特定端口的文档根目录。PORT 可以是除保留端口 (0-1023) 之外的任何可用端口

    <VirtualHost *:80> KeepAlive On

    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
    
  3. 在 Apache conf 文件 (/etc/httpd/conf/httpd.conf) 中添加此 Port No PORT

    听端口

  4. 重新启动 Apache 服务器

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

你也可以参考这些

使用 MAMP 配置虚拟主机

在 MAMP for Mac 中添加虚拟主机


推荐阅读