我给 localhost 起了一个别名:“myhost”。在地址栏中输入“myhost”会显示 /var/www/index.php。到目前为止一切顺利。在 /var/www 上设置一个 apache 虚拟主机并将其命名为“myhost”,然后添加三个别名:“*.myhost” “*.myhost.*” “myhost.*”,其工作原理如下:
myhost = 网站索引/登录页面/一般内容
user.myhost = 用户特定的一般内容
myhost.topic = 与用户无关的主题内容
user.myhost.topic = 特定于用户的主题内容
但所有数据都是动态加载的,因此实际的 URL 更像是:
myhost/index.php?user=(空或用户名)&host=myhost&app=(空或主题)
我花了两天时间试图弄清楚这个重写规则,但毫无进展。任何帮助都将不胜感激。
编辑:另外,我是否必须将 user1.myhost、user2.myhost、myhost.topic1、myhost.topic2、user1.myhost.topic1、user2.myhost.topic1、user1.myhost.topic2、user2.myhost.topic2 等添加到我的 hosts 文件中才能使其正常工作?如果是这样,有没有更好的方法?
答案1
您可以使用这些重写规则将所有域重定向到myhost
带有主机参数的域。
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} myhost
RewriteRule .* - [L]
RewriteCond %{QUERY_STRING} ^.+$
RewriteRule ^(.*)?(.*)$ $1?$2&host=%{HTTP_HOST} [L]
RewriteRule ^(.*)$ http://myhost/$1?host=%{HTTP_HOST} [L]
您还可以在应用程序中获取域名(例如 php 中的 $_SERVER["SERVER_NAME"])并使用此值。因此您不需要额外的主机参数。
您可以安装一个易于使用的 DNS 服务器(如 tinydns)并设置通配符子域,如 *.myhost 等。但 user2.myhost.topic2 不是有效域。如果您的域名是“example.com”,您的子域应该是“topic1.example.com”或“user1.topic1.example.com”。您不能在互联网上使用“user1.example.topic1”作为域名。