WWW 和非 WWW 的虚拟 DocumentRoot 配置 - 无需重定向

WWW 和非 WWW 的虚拟 DocumentRoot 配置 - 无需重定向

我搜索了很多,但找不到答案

在 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。

相关内容