”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 带有虚拟主机的 PHP Apache 项目

带有虚拟主机的 PHP Apache 项目

发布于2024-11-09
浏览:248

PHP Apache project with Virtual Host

创建项目目录

首先,为您的项目创建一个目录。例如,让我们创建一个名为 php:

的目录

sudo mkdir /var/www/html/php


创建 PHP 测试文件

在项目目录中创建一个index.php文件:


echo "

设置目录权限

设置适当的权限,以便Apache可以访问该目录:


sudo chown -R www-data:www-data /var/www/html/php 
sudo chmod -R 755 /var/www/html/php


命令 sudo chown -R www-data:www-data /var/www/html/php 执行以下操作:

  1. -R:该选项表示应该递归执行操作,即不仅对指定目录执行操作,还对其所有子目录和文件执行操作。

  2. www-data:www-data:指定将成为文件新所有者的用户和组都是 www-data。这是 Linux 系统上的常见用户和组,用作 Apache 和 Nginx 等 Web 服务器的默认用户。

  3. /var/www/php:这是要更改属性的目录的路径。

命令 sudo chmod -R 755 /var/www/html/php 执行以下操作:

755:这是一种权限模式:

  1. 第一个数字 (7) 赋予文件(或目录)的所有者读 (4)、写 (2) 和执行 (1) 权限,总共 7 个。

  2. 第二个数字 (5) 为组提供读取 (4) 和执行 (1) 权限,但不提供写入权限,总共 5 个。

  3. 第三个数字 (5) 还授予其他用户读取 (4) 和执行 (1) 权限,但不提供写入权限,总共 5 个。

综上所述,这个命令改变了/var/www/html/php内所有文件和目录的权限,让所有者拥有完全的控制权(读、写和执行),而组和其他用户只有读和执行权限。这在 Web 服务器环境中很常见,以确保服务器可以访问必要的文件而不影响安全性。

创建虚拟主机配置文件

为您的虚拟主机创建一个新的配置文件。该文件应与 php 项目同名:


sudo your_editor /etc/apache2/sites-available/php.conf


添加虚拟主机配置

在文件中添加以下配置:



    ServerAdmin webmaster@localhost
    ServerName php.info
    DocumentRoot /var/www/html/php

    
        AllowOverride All
        Require all granted
    

    ErrorLog ${APACHE_LOG_DIR}/php_error.log
    CustomLog ${APACHE_LOG_DIR}/php_access.log combined

我们来分析一下各部分代码:

    • 这是侦听端口 80 的虚拟主机配置块的开始,该端口是 HTTP 的默认端口。星号 (*) 表示虚拟主机将接受来自任何 IP 地址的连接。
  1. ServerAdmin webmaster@localhost

    • 定义服务器管理员的电子邮件地址。该电子邮件地址可用于错误消息或用户需要联系管理员时。
  2. 服务器名称 php.info

    • 指定应用此设置的服务器的名称。在这种情况下,虚拟主机将响应 php.info 的请求。重要的是该名称正确解析为服务器的 IP(通常在 /etc/hosts 文件或 DNS 中配置)。
  3. 文档根目录 /var/www/html/php

    • 定义包含当有人访问 ServerName 时将提供服务的文件的目录(在本例中为 php.info)。在此示例中,文件位于 /var/www/html/php.
    • 此块指定指定目录的特定设置。此块中的设置会影响 Apache 针对该特定目录的行为。

允许覆盖全部

  • 它允许 /var/www/html/php/ 目录中的 .htaccess 文件覆盖 Apache 的设置。这意味着开发人员可以使用 .htaccess 文件来配置规则,例如重定向或访问控制,而无需编辑主 Apache 配置文件。

要求所有已授予的

  • 允许所有用户访问该目录。这意味着任何人都可以不受限制地访问 /var/www/html/php/ 内的文件。
  1. 错误日志${APACHE_LOG_DIR}/php_error.log
  2. 指定此虚拟主机的 Apache 错误日志文件的路径。 ${APACHE_LOG_DIR} 是一个变量,通常在 Apache 主配置文件中设置,指向存储日志的目录。这里,与该虚拟主机相关的错误将记录在 php_error.log 文件中。

  3. CustomLog ${APACHE_LOG_DIR}/php_access.log 组合

  4. 定义此虚拟主机的 Apache 访问日志文件的路径。与 ErrorLog 一样,这也使用 ${APACHE_LOG_DIR} 变量。组合格式记录有关请求的信息,包括客户端的 IP 地址、请求的时间、HTTP 方法、请求的 URL、状态代码和用户代理。

启用虚拟主机

使用命令启用新的虚拟主机:


sudo a2ensite php.conf


激活重写模块(如果需要)

如果需要使用.htaccess或URL重写,请激活Apache重写模块:


sudo a2enmod rewrite


将服务器名称添加到主机

要使用您定义的服务器名称 (php.info) 访问您的项目,请在 /etc/hosts 文件中添加一个条目:


sudo your_editor /etc/hosts


将以下行添加到文件末尾:


127.0.0.1 php.info




重新启动 Apache

重新启动 Apache 以使更改生效:


sudo systemctl restart apache2




访问项目

您现在可以通过输入 http://php.info 在浏览器中访问您的项目。

版本声明 本文转载于:https://dev.to/xxzeroxx/php-apache-project-with-virtual-host-2npk?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 手动测试:完整指南
    手动测试:完整指南
    手动测试在不使用自动化工具的情况下通过人机交互发现错误,在确保软件质量方面发挥着关键作用。它涉及测试人员在不借助脚本或自动化框架的情况下手动执行测试用例来验证软件功能、可用性和性能。虽然自动化变得越来越流行,但手动测试对于确保产品按预期工作仍然至关重要。 手动测试的作用和重要性 虽然自动化测试很有...
    编程 发布于2024-11-09
  • 可简化您工作流程的顶级 API 测试工具
    可简化您工作流程的顶级 API 测试工具
    API 已成为现代软件开发不可或缺的一部分,支持不同系统和应用程序之间的通信。无论您是在构建 Web 应用程序、移动应用程序,甚至是微服务,确保您的 API 完美运行都至关重要。 API 测试工具可以更轻松地自动化和验证 API 的性能、功能和安全性。好消息?其中许多工具都是免费且非常有效的。在这...
    编程 发布于2024-11-09
  • RGFW 底层:剪贴板复制/粘贴
    RGFW 底层:剪贴板复制/粘贴
    Introduction Reading and writing to the clipboard using low-level APIs can be tricky. There are a bunch of steps required. This tutorial simp...
    编程 发布于2024-11-09
  • 为什么我应该使用 `try {} catch {}` 来处理 PDO 错误而不是 `if {} else {}`?
    为什么我应该使用 `try {} catch {}` 来处理 PDO 错误而不是 `if {} else {}`?
    异常错误处理:Try {} Catch {} 与 If {} Else {}从普通 MySQL 到 PDO 的转换在 PHP 中,使用 try {} catch {} 块进行错误处理而不是 if {} else {} 组合的转变已变得普遍。阐明这种方法的优点:错误合并:与嵌套的 if {} else...
    编程 发布于2024-11-09
  • JavaScript 如何控制超时执行并确定剩余时间?
    JavaScript 如何控制超时执行并确定剩余时间?
    JavaScript 中的暂停和恢复超时使用 JavaScript 时,可能需要控制异步操作​​的流程,例如超时。在这里,我们探索暂停和恢复活动超时的方法,以及检索当前超时的剩余时间。暂停和恢复超时要暂停超时,您可以使用包装器拦截 window.setTimeout 调用并提供必要功能的函数。包装函...
    编程 发布于2024-11-09
  • 为什么异步加载脚本中 document.write() 受到限制?
    为什么异步加载脚本中 document.write() 受到限制?
    异步加载脚本中的执行限制:了解 document.write() 限制尝试从异步加载的脚本写入文档会引发控制台消息“无法在‘文档’上执行‘写入’:除非显式打开,否则无法从异步加载的外部脚本写入文档。”尽管脚本的行为符合预期,但可能会出现此消息,让开发人员感到困惑。为什么存在限制异步加载的脚本通常在解...
    编程 发布于2024-11-09
  • 如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    MySQL配置不正确:相对路径的问题在Django中运行python manage.py runserver时,可能会遇到以下错误:ImproperlyConfigured: Error loading MySQLdb module: dlopen(/Library/Python/2.7/site-...
    编程 发布于2024-11-09
  • 如何根据元素的高度保持元素的纵横比?
    如何根据元素的高度保持元素的纵横比?
    根据高度维护 Div 纵横比将元素的宽度保持为其高度的百分比可能具有挑战性。虽然使用 padding-top 的百分比值可以达到相反的效果,但 padding-left 作为百分比依赖于对象的宽度,而不是其高度。为了解决这个问题,CSS 引入了宽高比属性,提供一个优雅的解决方案来根据高度保持一致的纵...
    编程 发布于2024-11-09
  • 如何使用 PHP 或 Perl 在浏览器中直接显示 PDF 文件?
    如何使用 PHP 或 Perl 在浏览器中直接显示 PDF 文件?
    使用 PHP 或 Perl 在浏览器中显示 PDF 文件直接在浏览器中显示 PDF 文件可能是跟踪用户参与度和跟踪用户参与度的有用技术。保护敏感文件位置。虽然存在下载或创建 PDF 的简单方法,但如何加载现有 PDF 文件进行查看还不是很明显。PHP 解决方案:以下 PHP 代码可以是用于在浏览器中...
    编程 发布于2024-11-09
  • 为什么curl_exec()返回False以及如何有效处理它?
    为什么curl_exec()返回False以及如何有效处理它?
    当curl_exec()返回False时:深入研究错误处理领域在Web开发的世界中,curl_exec()函数在从远程服务器检索数据方面起着至关重要的作用。然而,程序员经常遇到一个令人费解的情况,即该函数始终返回 false。为了解开这个谜团,我们必须踏上错误检查和处理的核心之旅。当curl_exe...
    编程 发布于2024-11-09
  • Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta:列偏移的删除和恢复Bootstrap 4 在其 Beta 1 版本中引入了重大更改柱子偏移了。然而,随着 Beta 2 的后续发布,这些变化已经逆转。从 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    编程 发布于2024-11-09
  • 如何消除 Bootstrap 堆叠行中的间隙:综合指南
    如何消除 Bootstrap 堆叠行中的间隙:综合指南
    Bootstrap 堆叠行中的间隙:综合解决方案Bootstrap 堆叠行中存在间隙对于开发人员来说可能是一个令人沮丧的问题。为了解决这个问题,有几种有效的解决方案可用。1。设置元素高度标准化:为所有投资组合元素分配固定高度可确保内容的均匀分布。这消除了不同元素尺寸导致间隙的可能性。2。使用 Mas...
    编程 发布于2024-11-09
  • 为什么使用“shell_exec”从 PHP 调用时我的 Bash 脚本无法执行?
    为什么使用“shell_exec”从 PHP 调用时我的 Bash 脚本无法执行?
    从 PHP 执行 Bash 命令:脚本执行失败故障排除在这个问题中,我们遇到一位 PHP 开发人员尝试使用 shell_exec 从 PHP 执行 bash 脚本。使用的语法为:$output = shell_exec("./script.sh var1 var2");但是,调用...
    编程 发布于2024-11-09
  • 为什么按钮不拉伸以用“display: block”和“width: auto”填充容器?
    为什么按钮不拉伸以用“display: block”和“width: auto”填充容器?
    为什么“display: block”和“width: auto”不能拉伸按钮来填充容器?当使用“display: block”和“ width: auto” 在按钮上,它可能会拉伸并填充其容器。然而,情况并非总是如此。特别是,现代浏览器中的按钮在这方面的行为与其他块元素不同。这种行为背后的原因在于...
    编程 发布于2024-11-09
  • 在 Docker 容器上设置 Redmine
    在 Docker 容器上设置 Redmine
    Redmine 是一个灵活的开源项目管理和问题跟踪 Web 应用程序。它广泛用于管理项目、跟踪错误以及处理任务和截止日期。 Redmine 使用 Ruby on Rails 开发,具有高度可定制性,支持广泛的团队协作和项目组织功能。 Redmine 因其灵活性、定制性和开源特性而成为商业项目管理工具...
    编程 发布于2024-11-09

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3