.htaccess重定向通配符子域

时间:2018-03-06 14:59:17

标签: apache .htaccess url-rewriting wildcard-subdomain

我有一个域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

2 个答案:

答案 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]

注意:清除浏览器缓存,然后对其进行测试。