我有一个虚拟服务器,我想将它指向两个域,都指向不同的站点。
例如,example1.com转到/var/www/example1。example2.com去/var/www/example2.
我可以用 VirtualHosts 做到这一点:
<VirtualHost *:80>
ServerName example1.com
DocumentRoot "/var/www/example1"
</VirtualHost>
<VirtualHost *:80>
ServerName example2.com
DocumentRoot "/var/www/example2"
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
我的第一个问题是与领先的www. 为了启用对 的支持www,我刚刚添加了一个ServerAlias:
<VirtualHost *:80>
ServerName example1.com
ServerAlias www.example1.com
DocumentRoot "/var/www/example1"
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
这是最好的方法吗?
我的第二个问题涉及 SSL。我也想example2.com通过 SSL 访问:https://example2.com. 我已经颁发了证书等,但我如何在我的httpd.conf文件中实现这一点?目前我有一个临时的解决方法。我刚刚将服务器的 main 更改DocumentRoot为指向 this /var/www/example2。我知道 SSL 位于不同的端口上,因此 VirtualHost 定义不会对其进行解释,因此我已将其作为快速解决方法。但是,我想知道这样做的最佳方法是什么?
我有一个 Apache 配置设置,其中多个虚拟主机作为子域。我刚刚购买了一个新域名,我希望对这个域名的所有请求都重定向到新域名,包括子域:
old.com > new.com
sub.old.com > sub.new.com
Run Code Online (Sandbox Code Playgroud)
有没有什么简单的方法可以在里面做到这一点httpd.conf?
我有一个虚拟主机在我的本地 Apache 副本上运行。它有一个别名。
<VirtualHost 127.0.0.1>
ServerName oliverash.me.dev
DocumentRoot "/usr/docs/oliverash.me/public"
Alias /mayor "/usr/docs/uni/tmosct/public"
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
这工作正常。我可以通过oliverash.me.dev/mayor在浏览器中访问来访问别名。但是,我.htaccess rewrite在那个别名的文件夹中有一个简单的,它将所有内容(文件夹除外)重写到 index.php 页面。此重写工作正常。
尽管重写正在工作,但重写返回 404 Not Found 错误。例如,如果我转到oliverash.me.dev/mayor/abcdefg,它会重写index.php文件,但我收到此错误:
“在此服务器上找不到请求的 URL /usr/docs/uni/tmosct/public/index.php。”
这个文件确实存在。我可以直接访问它。
当我使用相同的别名但localhost不仅仅是这个虚拟主机时,重写工作正常,index.php 返回实际文件,而不是 404。这让我觉得这与我的权限有关虚拟主机。所以我试图在我的下面添加这个httpd-vhosts.conf(没有运气):
<Directory "/usr/docs/oliverash.me/public">
AllowOverride All
Order allow,deny
Allow from all
</Directory>
Run Code Online (Sandbox Code Playgroud)
这些是在localhost's上使用的相同设置DocumentRoot,所以我不明白为什么它没有帮助。
更新:
所以我检查了Apache error_log。事实证明,这个别名的重写实际上是相对于这个虚拟主机的文档根目录的。
[Fri Jan 06 22:30:57 2012] [error] [client 127.0.0.1] File does not exist: /usr/docs/oliverash.me.dev/usr
这个重写实际上是在/usr/docs/oliverash.me.dev/public/usr/docs/uni/tmosct/public寻找 index.php。希望很明显,它应该在寻找/usr/docs/oliverash.me.dev。
更新 2: …
目前,我为各个子域设置了多个虚拟主机。如果我可以告诉 Apache 使用通配符自动查找文件夹,那就容易多了。例如,hello.domain.com将使用/var/www/hello目录作为其DocumentRoot.
但是,我希望能够定义异常,例如如果我想helloworld.domain.com改为指向/var/www/helloworld/public。
我环顾四周,但所有示例似乎都在做不同的事情。
apache-2.2 ×3
virtualhost ×3
subdomain ×2
.htaccess ×1
alias ×1
domain ×1
mod-rewrite ×1
ssl ×1