我写了一个基于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