我已经编写了一个基于 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
也有可能,如果您在 vhost 中设置为与目录结构中使用的名称相同的名称,例如:
<VirtualHost *:80>
DocumentRoot /var/www/domainame.com
ServerName domainame.com
ServerAlias www.domainame.com
</VirtualHost>
然后您就可以%{SERVER_NAME}
在重写规则中使用。
答案4
据我了解,你的问题只需设置你的文档根目录到正确的目录:
DocumentRoot /var/www/domainName.com