我編寫了一個基於 HTTP_HOST (www.domainname.com) 工作的 RewriteRule,但我希望它僅基於網域部分 (domainname.com) 工作。
進一步澄清
資料夾結構為/var/www/domainName.com
.
當我在 apache conf 檔案中寫入此規則時
RewriteRule ^/js/(.*) /%{HTTP_HOST}/js/$1 [L]
並使用 www.mydomain.com 訪問該網站 - 它嘗試尋找/var/www/www.domainName.com
不存在的資料夾。
因此,我需要轉換上述規則以從 HTTP_HOST 中刪除“www”。
答案1
我建議您重定向請求,而不是在兩個地方提供相同網站。建立一個新的 VirtualHost 來重定向流量:
<VirtualHost *:80>
ServerName www.domainName.com
Redirect / http://domainName.com/
</VirtualHost>
或在其他規則之上添加一組規則來檢測 www 的存在。前綴並重定向用戶:
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule /(.*) http://%1/$1 [R,L]
如果您確實希望您的網站位於兩個域名上而不進行任何重定向,則可以使用 RewriteCond 僅提取域名,並且它將作為 %1 供 RewriteRule 使用。
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.*) [NC]
RewriteRule ^/js/(.*) /%1/js/$1 [L]
答案2
我懷疑您是否可以做到這一點,創建指向適當目錄的連結不是更容易嗎?
ln -s yourdomain.com www.yourdomain.com
答案3
你嘗試過使用嗎%{DOCUMENT_ROOT}
?
也可以,如果您在虛擬主機中設定了Servername
與目錄結構中使用的名稱相同的名稱,例如:
<VirtualHost *:80>
DocumentRoot /var/www/domainame.com
ServerName domainame.com
ServerAlias www.domainame.com
</VirtualHost>
然後你可以%{SERVER_NAME}
在你的重寫規則中使用。
答案4
據我了解你的問題,只需設定你的文檔根目錄到正確的目錄:
DocumentRoot /var/www/domainName.com