我一直在研究 Windows HOSTS 文件,它似乎位于 c:\windows\ (Windows 95、98 和 Me)下,以及 C\Windows\system32\drivers\etc\ 下(Windows NT、2000、XP 和 Vista)
我想指出
http://我的域名/到我的 Web 服务器的特定文件夹。我的 Hosts 文件目前如下所示:
127.0.0.1 domainA
127.0.0.1 domainB
但我想要的是
http://domainA/ points to http://127.0.0.1/domainA/
http://domainB/ points to http://127.0.0.1/domainB/
我怎样才能实现这个目标?
测试
要使用 rewriteModule,请取消注释 httpd.conf 文件中的下一行:
LoadModule rewrite_module modules/mod_rewrite.so
下一个代码不是我想要的。
RewriteEngine on
RewriteCond %{HTTP_HOST} ^domainA [NC]
RewriteRule ^/(.*) http://127.0.0.1/domainA/$1 [L,R]
在浏览器中输入上述代码http://域名A/它会自动将其更改为http://127.0.0.1/域名A/但我希望它留在http://域名A/在提供内容的同时http://127.0.0.1/域名A/文件夹。
例如。http://127.0.0.1/指向 /htdocs
我想http://域名A/指向 /htdocs/domainA
解决方案
在 apache httpd.conf 中添加以下几行:
<VirtualHost *:80>
ServerName http://domainA/
DocumentRoot "/htdocs/domainA"
</VirtualHost>
<VirtualHost *:80>
ServerName http://domainB/
DocumentRoot "/htdocs/domainB"
</VirtualHost>
答案1
第二个答案:
您必须使用 apache 虚拟主机功能:
<VirtualHost *:80>
# url like http://127.0.0.1/.....
ServerName 127.0.0.1
DocumentRoot /htdocs
</VirtualHost>
<VirtualHost *:80>
# url like http://domaina/.....
ServerName domaina
DocumentRoot /htdocs/domaina
</VirtualHost>
答案2
HOSTS 文件的唯一用途是将名称映射到 IP 地址;它与 URL 完全无关(DNS 也是如此)。您无法通过这种方式做到这一点。
除了按照建议重写 URL 之外,您还可以使用主机标头:
- 在 HOSTS 文件中定义这两个名称,并使其两个都指向 127.0.0.1
- 在您的 Web 服务器中定义两个网站,一个回答“域 A”,另一个回答“域 B”
这样,当你打电话时http://域名A,你会看到第一个网站;当你调用http://域名B,第二个就会出现;即使两个都在同一个 IP 地址上运行,Web 服务器也会自动识别它被调用的名称并提供适当的网站。
如果您想使用 IIS,您需要运行 Windows 的服务器版本才能创建多个网站;XP 和 Vista 等客户端系统上的 IIS 仅支持单个站点。
答案3
您谈论的是两种不同的想法:
- 名称解析(dns、hosts 文件)
- url 重写(转换 url)
您无法使用 hosts 文件进行 url 写入。
去做 :
http://domainA/ points to http://127.0.0.1/domainA
您需要在您的 Web 服务器上使用 URL 写入 API:
- Apache 的 mod_rewriteApache 文档
或者
- IIS 的 isapirewriteisapi 免费版本
Apache 的示例配置:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^domainA [NC]
RewriteRule ^/(.*) http://127.0.0.1/domainA/$1 [L,R]
RewriteCond %{HTTP_HOST} ^domainB [NC]
RewriteRule ^/(.*) http://127.0.0.1/domainB/$1 [L,R]