Apache重写:如何编写一个基于域名(而不是HTTP_HOST)的规则?

我写了一个基于HTTP_HOST(www.domainname.com)的RewriteRule,但是我希望它只在域名部分(domainname.com)的基础上工作。

进一步澄清

该文件夹结构是/var/www/domainName.com

当我写这个规则在Apache的configuration文件

 RewriteRule ^/js/(.*) /%{HTTP_HOST}/js/$1 [L] 

并访问该网站使用www.mydomain.com – 它试图find文件夹/var/www/www.domainName.com ,它不存在。

所以,我需要转换上述规则,从HTTP_HOST中删除“www”。

我build议你redirect请求,而不是在两个地方提供相同的网站。 要么创build一个新的VirtualHost来redirectstream量:

 <VirtualHost *:80> ServerName www.domainName.com Redirect / http://domainName.com/ </VirtualHost> 

或者在你的其他人的上面添加一组规则来检测www的存在。 前缀和redirect用户:

 RewriteCond %{HTTP_HOST} ^www\.(.*) [NC] RewriteRule /(.*) http://%1/$1 [R,L] 

如果你真的想要你的网站在两个域名没有任何redirect,你可以使用一个RewriteCond拉出只是域名,它可以作为%1的RewriteRule。

 RewriteCond %{HTTP_HOST} ^(?:www\.)?(.*) [NC] RewriteRule ^/js/(.*) /%1/js/$1 [L] 

我怀疑你是否可以做到这一点,只是创build链接到适当的目录是不是更容易?

 ln -s yourdomain.com www.yourdomain.com 

您是否尝试过使用%{DOCUMENT_ROOT}

如果你已经把你的虚拟主机中的Servername设置成你在目录结构中使用的同一个名字,例如:

 <VirtualHost *:80> DocumentRoot /var/www/domainame.com ServerName domainame.com ServerAlias www.domainame.com </VirtualHost> 

然后,您可以在您的重写规则中使用%{SERVER_NAME}

正如我理解你的问题,只需将您的DocumentRoot设置到正确的目录:

 DocumentRoot /var/www/domainName.com