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

带有虚拟主机的 PHP Apache 项目

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

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]删除
最新教程 更多>
  • 在JavaScript中如何并发运行异步操作并正确处理错误?
    在JavaScript中如何并发运行异步操作并正确处理错误?
    同意操作execution 在执行asynchronous操作时,相关的代码段落会遇到一个问题,当执行asynchronous操作:此实现在启动下一个操作之前依次等待每个操作的完成。要启用并发执行,需要进行修改的方法。 第一个解决方案试图通过获得每个操作的承诺来解决此问题,然后单独等待它们: co...
    编程 发布于2025-05-21
  • Java是否允许多种返回类型:仔细研究通用方法?
    Java是否允许多种返回类型:仔细研究通用方法?
    在Java中的多个返回类型:一种误解类型:在Java编程中揭示,在Java编程中,Peculiar方法签名可能会出现,可能会出现,使开发人员陷入困境,使开发人员陷入困境。 getResult(string s); ,其中foo是自定义类。该方法声明似乎拥有两种返回类型:列表和E。但这确实是如此吗...
    编程 发布于2025-05-21
  • Python不会对超范围子串切片报错的原因
    Python不会对超范围子串切片报错的原因
    在python中用索引切片范围:二重性和空序列索引单个元素不同,该元素会引起错误,切片在序列的边界之外没有。这种行为源于索引和切片之间的基本差异。索引一个序列,例如“示例” [3],返回一个项目。但是,切片序列(例如“示例” [3:4])返回项目的子序列。索引不存在的元素时,例如“示例” [9] ...
    编程 发布于2025-05-21
  • 如何从PHP中的Unicode字符串中有效地产生对URL友好的sl。
    如何从PHP中的Unicode字符串中有效地产生对URL友好的sl。
    为有效的slug生成首先,该函数用指定的分隔符替换所有非字母或数字字符。此步骤可确保slug遵守URL惯例。随后,它采用ICONV函数将文本简化为us-ascii兼容格式,从而允许更广泛的字符集合兼容性。接下来,该函数使用正则表达式删除了不需要的字符,例如特殊字符和空格。此步骤可确保slug仅包含...
    编程 发布于2025-05-21
  • 用户本地时间格式及时区偏移显示指南
    用户本地时间格式及时区偏移显示指南
    在用户的语言环境格式中显示日期/时间,并使用时间偏移在向最终用户展示日期和时间时,以其localzone and格式显示它们至关重要。这确保了不同地理位置的清晰度和无缝用户体验。以下是使用JavaScript实现此目的的方法。方法:推荐方法是处理客户端的Javascript中的日期/时间格式化和时...
    编程 发布于2025-05-21
  • Java开发者如何保护数据库凭证免受反编译?
    Java开发者如何保护数据库凭证免受反编译?
    在java 在单独的配置文件保护数据库凭证的最有效方法中存储凭据是将它们存储在单独的配置文件中。该文件可以在运行时加载,从而使登录数据从编译的二进制文件中远离。使用prevereness class import java.util.prefs.preferences; 公共类示例{ 首选项...
    编程 发布于2025-05-21
  • 如何在Java中正确显示“ DD/MM/YYYY HH:MM:SS.SS”格式的当前日期和时间?
    如何在Java中正确显示“ DD/MM/YYYY HH:MM:SS.SS”格式的当前日期和时间?
    如何在“ dd/mm/yyyy hh:mm:mm:ss.ss”格式“ gormat 解决方案:的,请访问量很大,并应为procectiquiestate的,并在整个代码上正确格式不多: java.text.simpledateformat; 导入java.util.calendar; 导入java...
    编程 发布于2025-05-21
  • CSS强类型语言解析
    CSS强类型语言解析
    您可以通过其强度或弱输入的方式对编程语言进行分类的方式之一。在这里,“键入”意味着是否在编译时已知变量。一个例子是一个场景,将整数(1)添加到包含整数(“ 1”)的字符串: result = 1 "1";包含整数的字符串可能是由带有许多运动部件的复杂逻辑套件无意间生成的。它也可以是故意从单个真理...
    编程 发布于2025-05-21
  • 在程序退出之前,我需要在C ++中明确删除堆的堆分配吗?
    在程序退出之前,我需要在C ++中明确删除堆的堆分配吗?
    在C中的显式删除 在C中的动态内存分配时,开发人员通常会想知道是否有必要在heap-procal extrable exit exit上进行手动调用“ delete”操作员,但开发人员通常会想知道是否需要手动调用“ delete”操作员。本文深入研究了这个主题。 在C主函数中,使用了动态分配变量(H...
    编程 发布于2025-05-21
  • 在Java中使用for-to-loop和迭代器进行收集遍历之间是否存在性能差异?
    在Java中使用for-to-loop和迭代器进行收集遍历之间是否存在性能差异?
    For Each Loop vs. Iterator: Efficiency in Collection TraversalIntroductionWhen traversing a collection in Java, the choice arises between using a for-...
    编程 发布于2025-05-21
  • 如何检查对象是否具有Python中的特定属性?
    如何检查对象是否具有Python中的特定属性?
    方法来确定对象属性存在寻求一种方法来验证对象中特定属性的存在。考虑以下示例,其中尝试访问不确定属性会引起错误: >>> a = someClass() >>> A.property Trackback(最近的最新电话): 文件“ ”,第1行, AttributeError: SomeClass...
    编程 发布于2025-05-21
  • 如何使用组在MySQL中旋转数据?
    如何使用组在MySQL中旋转数据?
    在关系数据库中使用mySQL组使用mySQL组进行查询结果,在关系数据库中使用MySQL组,转移数据的数据是指重新排列的行和列的重排以增强数据可视化。在这里,我们面对一个共同的挑战:使用组的组将数据从基于行的基于列的转换为基于列。 Let's consider the following ...
    编程 发布于2025-05-21
  • PHP SimpleXML解析带命名空间冒号的XML方法
    PHP SimpleXML解析带命名空间冒号的XML方法
    在php 很少,请使用该限制很大,很少有很高。例如:这种技术可确保可以通过遍历XML树和使用儿童()方法()方法的XML树和切换名称空间来访问名称空间内的元素。
    编程 发布于2025-05-21
  • C++中如何将独占指针作为函数或构造函数参数传递?
    C++中如何将独占指针作为函数或构造函数参数传递?
    在构造函数和函数中将唯一的指数管理为参数 unique pointers( unique_ptr [2启示。通过值: base(std :: simelor_ptr n) :next(std :: move(n)){} 此方法将唯一指针的所有权转移到函数/对象。指针的内容被移至功能中,在操作...
    编程 发布于2025-05-21
  • 如何将多种用户类型(学生,老师和管理员)重定向到Firebase应用中的各自活动?
    如何将多种用户类型(学生,老师和管理员)重定向到Firebase应用中的各自活动?
    Red: How to Redirect Multiple User Types to Respective ActivitiesUnderstanding the ProblemIn a Firebase-based voting app with three distinct user type...
    编程 发布于2025-05-21

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

Copyright© 2022 湘ICP备2022001581号-3