我的文件中有以下代码.htaccess
:
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
上面的代码用于www
在域没有 时添加到域www
。但我有一个域,例如:(myloadbalancername-432566808.us-west-1.elb.amazonaws.com
来自 AWS Elastic Load Balancer 的 DNS),并且该域不适用于。那么,除了特定域之外,www
我如何为所有域请求添加?www
RewriteCond %{REQUEST_URI} !myloadbalancername
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
我尝试使用上面的代码,检查域名是否没有单词,然后检查域名是否没有www
,但没有成功。我是初学者,.htaccess
所以我不知道我做错了什么。
答案1
和你的其他情况一样,检查是否www
存在主持人,您需要HTTP_HOST
再次检查服务器变量,而不是REQUEST_URI
- 它仅保存 URL 路径。
请尝试以下操作:
RewriteCond %{HTTP_HOST} !^myloadbalancername
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule (.*) http://www.%{HTTP_HOST}/$1 [R=301,L]
我还添加了一个字符串锚点(^
),这样如果它要失败的话,它会更快失败(更有效率),而不是搜索^(.*)$
对于主机字符串中的任意位置的“myloadbalancername”。此外,如果您要捕获整个模式(例如,与 相同(.*)
),则无需包含锚点。
测试之前清除所有中间缓存,因为任何错误的 301 都会被浏览器缓存。