我有一个博客,位于mysite.tld/blog
。目前通过根目录中的mysite.tld
重定向到。显然,当我两年前设置它时,我无法让同样位于根目录中的文件工作。在文件系统上,我的博客位于。mysite.tld/blog
index.php
.httaccess
/var/www/blog
现在我创建了一个简单的网站,我希望它显示在mysite.tld
。它通过一个 PHP 微框架工作,该框架通过index.php
文件提供页面。我在 git repo 中拥有这个网站,在这个 repo 中, 位于index.php
。www/index.php
我只想在我的服务器上克隆一个 repo,这样我就可以拉取更新到新版本。因此,假设我将其克隆为site
,/var/www
入口点最终位于/var/www/site/www/index.php
。
我花了 3 个小时尝试让这个非常简单的东西工作,但无济于事。我只想将 URL 映射/blog
到/var/www/blog
并将 URL 的其余部分映射/
到/var/www/site/index
。我需要什么神奇的配置才能做到这一点?
以下是输出lsb_release -a
:
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.2 LTS
Release: 14.04
Codename: trusty
以下是输出apache2ctl -V
:
Server version: Apache/2.4.7 (Ubuntu)
Server built: Jul 22 2014 14:36:38
Server's Module Magic Number: 20120211:27
Server loaded: APR 1.5.1-dev, APR-UTIL 1.5.3
Compiled using: APR 1.5.1-dev, APR-UTIL 1.5.3
Architecture: 64-bit
Server MPM: prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="/etc/apache2"
-D SUEXEC_BIN="/usr/lib/apache2/suexec"
-D DEFAULT_PIDLOG="/var/run/apache2.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="mime.types"
-D SERVER_CONFIG_FILE="apache2.conf"
以下是输出apache2ctl -M
:
Loaded Modules:
core_module (static)
so_module (static)
watchdog_module (static)
http_module (static)
log_config_module (static)
logio_module (static)
version_module (static)
unixd_module (static)
access_compat_module (shared)
alias_module (shared)
auth_basic_module (shared)
authn_core_module (shared)
authn_file_module (shared)
authz_core_module (shared)
authz_groupfile_module (shared)
authz_host_module (shared)
authz_user_module (shared)
autoindex_module (shared)
cgi_module (shared)
deflate_module (shared)
dir_module (shared)
env_module (shared)
filter_module (shared)
mime_module (shared)
mpm_prefork_module (shared)
negotiation_module (shared)
php5_module (shared)
reqtimeout_module (shared)
rewrite_module (shared)
setenvif_module (shared)
status_module (shared)
答案1
我要做的就是将 URL 映射
/blog
到/var/www/blog
并将 URL 的其余部分映射/
到/var/www/site/index
。为此我需要什么神奇的配置?
你可以很容易地做到这一点Apache 的Alias
指令像这样。请注意,我看到您使用的是 Apache 2.4.7,它的语法可能与此建议所基于的 Apache 2.2 及更早版本略有不同。但话虽如此,虽然语法可能略有不同,但总体概念仍然相同,我相当有信心 Apache 2.4 仍然具有Alias
功能。
这些项目将在您的主站点的 Apache 配置文件中设置,该文件位于 中/etc/apache2/sites-available/
。现在它们可能位于名为 的文件中/etc/apache2/sites-available/default
,或位于主机名的单独文件中,例如,/etc/apache2/sites-available/mysite.tld
因此,在彻底修改文件之前,请务必检查您的配置。
这会将所有请求设置为http://mysite.tld/blog
从中获取内容/var/www/blog
:
Alias /blog /var/www/blog
这会将所有请求设置为http://mysite.tld/
从中获取内容/var/www/site/index
:
Alias / /var/www/site/index
现在说,您可能只需要;只要您的设置为,Alias /blog /var/www/blog
那第二个Alias / /var/www/site/index
可能不需要。DocumentRoot
/var/www/site/index
关于 Apache 配置设置如何工作的良好、简单且简洁的概述可以在此网站上找到。