Apache-2.2

WWW 和非 WWW 的虛擬 DocumentRoot 配置 - 沒有重定向

  • May 2, 2015

我搜尋了很多但找不到答案

在 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

添加另一個重寫規則,它應該在配置文件中的另一個之前:

RewriteCond %{SERVER_NAME}  ^www\.(.*)
RewriteRule ^/(.*)$ /www/hosts/${lowercase:%1}/docs/$1

您在這裡所做的是將域名與正則表達式進行匹配。如果域名以“www.”開頭,則在“www.”之後的所有內容。將儲存在變數 %1 中。在下一行中,您將重新使用該變數而不是整個 ServerName。

引用自:https://serverfault.com/questions/502788