我搜索了很多,但找不到答案
在 Apache 中设置动态虚拟主机时,您可以执行以下操作:
RewriteEngine On
# a ServerName derived from a Host: header may be any case at all
RewriteMap lowercase int:tolower
## deal with normal documents first:
# allow Alias /icons/ to work - repeat for other aliases
RewriteCond %{REQUEST_URI} !^/icons/
# allow CGIs to work
RewriteCond %{REQUEST_URI} !^/cgi-bin/
# do the magic
RewriteRule ^/(.*)$ /var/www/domains/${lowercase:%{SERVER_NAME}}/html/$1
## and now deal with CGIs - we have to force a MIME type
RewriteCond %{REQUEST_URI} ^/cgi-bin/
RewriteRule ^/(.*)$ /var/www/domains/${lowercase:%{SERVER_NAME}}/cgi-bin/$1 [T=application/x-httpd-cgi]
问题是,您需要创建 2 个文件夹:example.com 和 www.example.com(或者创建一个文件夹并创建一个指向它的符号链接)
什么样的重写规则可以避免创建这两个文件夹?(或符号链接)
这个问题也适用于 NGINX
就像这个问题:Apache vhost 带有和不带有‘www’? 我不想使用 *.example.com
答案1
添加另一条重写规则,该规则应位于配置文件中另一条规则之前:
RewriteCond %{SERVER_NAME} ^www\.(.*)
RewriteRule ^/(.*)$ /www/hosts/${lowercase:%1}/docs/$1
您在这里所做的是将域名与正则表达式进行匹配。如果域名以“www.”开头,则“www.”后面的所有内容都将存储在变量 %1 中。在下一行中,您将重新使用该变量,而不是整个 ServerName。