我在 Windows 上安装了 Apache 2.2,为我的所有网站提供服务的文件夹是:
C:\Users\GSTAR\Documents\Web Sites
此文件夹中有每个网站的子文件夹
我目前通过导航到、等在我的服务器上访问这些http://localhost/site1
网站http://localhost/site2
。
我现在遇到的问题是,某些网站具有相对 URL 路径,这会导致问题,因为找不到资源(它会尝试在根文件夹中查找)。
我并不特别希望使用绝对 URL。我研究了 vhosts,因为这可能是一个解决方案。但我遇到了一些麻烦。
我希望继续使用相同的 URL 访问网站 - 但是我读过的一些教程建议使用site.local
类型约定,但我不想这样做。
有人对如何实现这个有什么建议吗?
答案1
处理此问题的理想方法是创建多个虚拟主机 - 每个站点一个。也许值得花一次时间更改 URL 并改变您习惯的访问方式。如果您继续将此设置用于多个项目,这肯定会为您节省大量时间和麻烦。这看起来像一个开发设置,因此它也有助于模拟生产行为。
答案2
我和斯基亚伊德夫就此而言。对您来说,最好和最简单的方法应该是设置虚拟主机。这相当简单。您需要做的就是:
1.) 停用中的ServerRoot
和指令(或,或无论主配置文件在您的系统中如何调用)。停用意味着删除该行,或者最好在其前面加上“#”。DocumentRoot
httpd.conf
apache.conf
2.) 停用相应的<Directive...>
容器。您可以找到它们,因为它们的路径与您的 相同DocumentRoot
。
这两个步骤不是必需的,但出于某些原因我这样做了
3.) 包含一个名为的新文件vhost.conf
或使用安装提供的文件。您可以通过在以下行中添加以下行来实现此目的:httpd.conf
Include "C:\Path\to\apache2\confdir\vhost.conf"
4.)在 (仅一次)NameVirtualHost *:80
顶部添加vhost.conf
80,即你希望 apache 监听的端口
5.) 添加<VirtualHost ...>
像这样的容器。
<VirtualHost *:80>
ServerName site1.local
DocumentRoot "C:\Users\GSTAR\Documents\Web Sites\Site1\"
DirectoryIndex index.html index.php
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory "C:\Users\GSTAR\Documents\Web Sites\Site1\">
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
这只是一个示例配置。您必须根据自己的需要进行调整。
6.)<VirtualHost ...>
根据需要添加上述样式的容器。只需调整DocumentRoot
和Directory
指令即可
7.) 要使site1.local
和site2.local
工作,您必须编辑主机文件或修改本地 DNS 服务器。如果您使用的是 Windows 7,您可以通过右键单击首选编辑器并以管理员权限启动它来访问此文件。如果不这样做,您将无法编辑它。现在,您可以通过浏览到C:\Windows\system32\drivers\etc\hosts
如果您需要进一步的帮助,请发表评论。
答案3
你可能正在寻找类似 mod_rewrite 的东西http://httpd.apache.org/docs/current/mod/mod_rewrite.html使用 RewriteBase。