在本地主机上的 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 等)站点的“根”在哪里,那是您所有代码开始的地方。该代码可以使用include
和require
访问其他地方的附加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 脚本?