我有一个域example.com并创建了一个通配符子域,将其指向DOC根目录
我想要它,以便任何人都可以使用name.example.com
然后将其附属ID添加到最后name.example.com/a/5
我创建了以下.htaccess代码
RewriteCond %{HTTP_HOST} ^name\.example\.com$ [NC]
RewriteRule ^(.*)$ http://www.name.example.com/a/1/$1 [L,R=301,QSA]
这是正确地重定向到www.name.example.com/a/1/
但我需要name.example.com/a/1/
当我从.htaccess规则中删除www时,它正在进行重定向循环
webserver是apache
答案 0 :(得分:0)
您需要排除要重定向到的目的地。
尝试:
RewriteCond %{HTTP_HOST} ^name\.example\.com$ [NC]
RewriteRule ^((?!a).*)$ http://name.example.com/a/1/$1 [L,R=301,QSA]
或者这个:
RewriteCond %{HTTP_HOST} ^name\.example\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/a [NC]
RewriteRule ^(.*)$ http://name.example.com/a/1/$1 [L,R=301,QSA]
清除浏览器缓存或使用不同的浏览器对其进行测试。
答案 1 :(得分:0)
让我先把你的代码:
RewriteCond %{HTTP_HOST} ^name\.example\.com$ [NC]
RewriteRule ^(.*)$ http://www.name.example.com/a/1/$1 [L,R=301,QSA]
条件将与没有name.example.com/whatever
的子域wwww
匹配,因此,它会正常工作,因为您重定向到www.name.example.com/whatever
,但如果您从替换中移除www
,则意味着您将name.example.com/whatever
重定向到name.example.com/a/1/whatever
重定向它,因为没有限制,如果不匹配目录/a/
执行此规则以及为什么循环发生。
因此,您应该从/a/
重定向排除URI
目录,但是请注意,URI不包含/a/
,如下所示:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?name\.example\.com$ [NC]
RewriteRule !/a/ http://name.example.com/a%{REQUEST_URI} [L,R=301]
注意:清除浏览器缓存,然后对其进行测试。